SQL как разбить строку после разделителя - PullRequest
0 голосов
/ 31 января 2020

Я создаю запрос в SSMS, и я полагаю, что мы используем Server 2012. У меня около месяца опыта работы SQL, поэтому я очень новичок в этом.

У меня есть строка alphanumeri c, которую я пытаюсь разбить, чтобы у меня был столбец только с числами , Строка начинается с 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

1 Ответ

1 голос
/ 31 января 2020

Вы можете использовать patindex(), чтобы найти позицию последней ди git в строке, например:

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

Демонстрация на скрипте БД SQLServer 2012 :

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 | mychars
:------- | :------- | :------
461|CNC  | 461      | |CNC   
1147|CNC | 1147     | |CNC   
1103FCR  | 1103     | FCR    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...