Как получить подстроку из инвариантной строки

#sql #sql-server #sql-server-2008

#sql #sql-сервер #sql-server-2008

Вопрос:

У меня есть столбец, в котором сохранен номер кредита, но данные в этом столбце меняются, и я должен получить подстроку из такой строки. примерами являются

 RF01234-001-9   
CFF 01234-012-5
DSL---01234-188-5
  

Во всех вышеуказанных случаях подстрока должна возвращать «01234», а другая подстрока должна возвращать «001», «012», «188».

Комментарии:

1. Почему вы используете неподдерживаемую версию SQL Server?

2. Что означает, что это '01234' вам нужно? Какова логика определения номера Кредита? Похоже, вам также следует привести данные в соответствие со стандартным форматом. Возможно, вам следует подумать о том, чтобы сделать это и внедрить CONSTRAINT , чтобы обеспечить соблюдение форматирования в будущем.

3. Кроме того, пожалуйста, избегайте «перемещения столбиков целей» после того, как вы начали получать ответы. Это часто может привести к отрицательным ответам на ваш вопрос (особенно если это делает недействительными существующие ответы) и, к сожалению, только отнимает время у тех, кто уже приложил усилия, чтобы ответить на ваш вопрос. Например, последнее предложение, которое вы добавили, теперь делает ответ Гордона неполным, даже если он (мог бы) быть правильным на момент ответа.

4. Всегда ли номер кредита в формате 00000-000-0 ? Может ли она иметь какой-либо другой формат? может ли быть больше одного в строке? Если да, то какую ценность вы хотели бы получить?

5. это единственные форматы, в которых она сохраняется.

Ответ №1:

Это отвечает на исходную версию вопроса.

Кажется, вам нужны первые 5 цифр в строке. Если это так:

 select substring(str, patindex('%[0-9][0-9][0-9][0-9][0-9]%', str), 5)
  

Здесь есть db<>fiddle.

Комментарии:

1. Гордон Линофф Спасибо. ваше решение работает. Я обновил свой вопрос. Мне также нужна средняя подстрока.

2. @SyedImranShah это должно было быть частью вашего первоначального вопроса. Не обновляйте вопросы и недействительные существующие ответы. Найдите время, чтобы полностью объяснить проблему с самого начала.

3. Ладно, на будущее.