我相信我正在SSMS中创建查询,我们正在使用Server 2012。我大约有一个月的SQL经验,所以我对此很陌生。
我有一个要拆分的字母数字字符串,因此我可以有一列只包含数字。字符串以2-4个数字开头,可以包含或不包含“ |”作为分隔符,末尾有3-4个字符。
我该怎么分隔像这样的列?
Current Numbers Everything else
461|CNC 461 |CNC
1147|CNC 1147 |CNC
1103FCR 1103 FCR
当前代码
SELECT
a.CTI_EMP_ID,
a.DS_LOAD_DT,
a.DURATIONSEC,
a.LGCY_SPSR_ID,
a.MSG_TYPE_CD,
a.SPSR_CLS_NM
FROM DW_RawData_CTIDetail a
LEFT JOIN DW_Dim_AssociateMapping b
ON a.CTI_EMP_ID = b.CTI_ID AND a.DS_LOAD_DT = b.ScheduleDate
WHERE
b.MUID = '400'
AND a.DS_LOAD_DT >= '2019-08-01'
ORDER BY DS_LOAD_DT DESC
您可以使用patindex()
查找字符串中最后一位的位置,例如:
patindex('%[0-9][^0-9]%', mycol)
然后您可以在查询中使用它:
select
left(mycol, patindex('%[0-9][^0-9]%', mycol)) mydigits,
right(mycol, len(mycol) - patindex('%[0-9][^0-9]%', mycol)) mychars
from t
Demo on SQLServer 2012 DB Fiddle:
with t as (
select '461|CNC' mycol
union all select '1147|CNC'
union all select '1103FCR'
)
select
mycol,
left(mycol, patindex('%[0-9][^0-9]%', mycol)) mydigits,
right(mycol, len(mycol) - patindex('%[0-9][^0-9]%', mycol)) mychars
from t
GO
mycol | mydigits |霉菌:------- | :------- | :------461 | CNC | 461 | | CNC1147 | CNC | 1147 | | CNC1103FCR | 1103 | FCR