Получить значение от укуса в определенном месте - PullRequest
1 голос
/ 16 октября 2019

Я использую язык T-SQL, и мне интересно, как получить конкретную информацию из строки.

Пример строки:

Категория: azd Nomdu fichier: 684157 Тип документа: info id: 21542

Идея состоит в том, чтобы получить значение "684157", которое всегда будет между "fichier:" и "Type".

Я пробовал с substring и charindex, но мне чего-то не хватает.

Спасибо за вашу поддержку.

Вот мой код

select substring(com, charindex('fichier : ', com)+len('fichier : '), charindex('Type', com)-charindex('fichier : ', com) + len('Type')) 
from myTable

Ответы [ 3 ]

2 голосов
/ 16 октября 2019

Вот что я бы сделал:

SELECT LEFT(S.CutString,CHARINDEX(' Type :',S.CutString)) AS FinalString
FROM (VALUES('Category : azd Nom du fichier : 684157 Type : info Id : 21542'))V(String) --Would be your table
     CROSS APPLY (VALUES(STUFF(V.String,1,CHARINDEX('fichier : ',V.String) + LEN('fichier : '),'')))S(CutString);
2 голосов
/ 16 октября 2019

Возможно, есть более удобный способ сделать это, но вот метод, использующий CHARINDEX и SUBSTRING.

SELECT SUBSTRING(com,  
    CHARINDEX('fichier :', com) + LEN('fichier :'), -- start index
    CHARINDEX('Type :', com) - (CHARINDEX('fichier :', com) + LEN('fichier :'))) -- length
FROM MyTable

startIndex - это индекс fichier : плюс длина fichier :. Конечный индекс - это индекс Type :. Для SUBSTRING нам нужно использовать начальный индекс и длину. Для вычисления длины подстроки мы используем индекс Type : и вычитаем то, что рассчитали для startIndex.

0 голосов
/ 16 октября 2019

дополнительный вариант:

SELECT parsename(replace(replace(com,'fichier : ','.'), 'Type','.'),2)
FROM MyTable

тест:

enter image description here

...