SQL如何在定界符后分割字符串

问题描述 投票:0回答:1

我相信我正在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
sql ssms
1个回答
0
投票

您可以使用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
© www.soinside.com 2019 - 2024. All rights reserved.