SQL Server – выберите подстроку всех символов после последнего дефиса
Я работаю с базой данных продуктов, пытаясь извлечь цвет продукта из комбинированного столбца кода ID / цвета, где цветовой код всегда является строкой, следующей за последним дефис в столбце. Проблема в том, что количество дефис, идентификатор продукта и цветовой код могут быть разными.
Вот четыре примера:
ABC123-001 BCD45678-0165 S-XYZ999-M2235 AS-ABC123-001
Цветовые коды в этом случае будут 001
, 0165
, M2235
и 001
. Каким будет лучший способ выбрать их в своей колонке?
- Как извлечь один или несколько URL-адресов из текстового (NVARCHAR (MAX)) столбца
- SQL выбирает для получения строки между двумя пробелами
- выделение подстроки в строке перед символом в SQL Server 2008
- Удалить последний символ из строкового столбца в SQL
- Скрыть символы в адресе электронной почты с помощью SQL-запроса
- Как получить значение между двумя аналогичными символами
- SQL Query, чтобы получить подстроку между в строке с несколькими круглыми скобками
- Разбиение строки SQL на несколько строк
- Получить символ между первым 2 специальным символом в SQL
- tsql: как заменить подстроку?
- SQL Query для выбора строки между двумя известными строками
- MS SQL Server - конкатенация определенным образом
- Как удалить ненужные подстроки в столбце с помощью T-SQL
Я думаю, что следующее делает то, что вы хотите:
select right(col, charindex('-', reverse(col)) - 1)
Если у вас нет дефиса в значении, используйте case
:
select (case when col like '%-%' then right(col, charindex('-', reverse(col)) - 1) else col end)
Хорошо проверить, существует ли дефис или нет в строке, чтобы избежать следующей ошибки:
Недопустимый параметр длины передается в нужную функцию.
SELECT CASE WHEN Col like '%\%' THEN RIGHT(Col,CHARINDEX('\',REVERSE(Col))-1) ELSE '' END AS ColName