Как извлечь число переменной длины из строки, используя Substring?

#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