#sql #sql-server
#sql #sql-сервер
Вопрос:
Мне нужно извлечь число из столбца string.Длина числа в строковом значении не фиксирована, но оно заканчивается специальным символом подчеркивания (_).Я пробовал с Substring, но безуспешно.Пожалуйста, предложите ниже примерные данные для столбца
Пример строки :
FilePath
1002001_Inv_QCR.tiff
100101_Inv_MAN.Jpg
SELECT SUBSTRING(Filepath,1,6) from Tblfileinfo
Комментарии:
1. Число всегда находится в начале строки?
2. Соответствует ли содержимое пути к файлу фиксированному шаблону?
3. Есть ли несколько имен файлов / номеров, хранящихся в одной записи? Если som, то для этого потребуется какой-то цикл, рекурсия и т.д. Если это только одно, то работает выражение substring.
Ответ №1:
Я думаю, следующее могло бы помочь:
SELECT
SUBSTRING(Filepath, 1, CHARINDEX('_', Filepath) - 1)
FROM
Tblfileinfo
Комментарии:
1. Спасибо за быстрый ответ, это устранило мою проблему. Как извлечь число, если входные данные выглядят следующим образом Inv_100200_Man.txt.
2. ооооочень, оооорыыыы. Было просто забавно, что я уже ответил на следующий вопрос, который задавал @Simhadri… (несмотря на то, что я ответил на это, очевидно, неправильно прочитав исходный вопрос). Я должным образом наказан и попытаюсь снова не злить богов SO. Все, что сказано, это плохой ответ или меня просто наказывают за ребячество?
Ответ №2:
DECLARE @Value NVarChar(255)
SET @Value = 'Something_1002001_Inv_QCR.tiff'
SELECT SubString(@Value, PatIndex('%[0-9]%', @Value), CharIndex('_', @Value, PatIndex('%[0-9]%', @Value)) - PatIndex('%[0-9]%', @Value))
(примечание: это также обработало бы случай, когда число НЕ находится в начале имени)
Специфично для предоставленной таблицы:
SELECT SubString(Filepath, PatIndex('%[0-9]%', Filepath), CharIndex('_', Filepath, PatIndex('%[0-9]%', Filepath)) - PatIndex('%[0-9]%', Filepath))
FROM Tblfileinfo