SQL Server – выберите подстроку всех символов после последнего дефиса

Я работаю с базой данных продуктов, пытаясь извлечь цвет продукта из комбинированного столбца кода ID / цвета, где цветовой код всегда является строкой, следующей за последним дефис в столбце. Проблема в том, что количество дефис, идентификатор продукта и цветовой код могут быть разными.

Вот четыре примера:

ABC123-001 BCD45678-0165 S-XYZ999-M2235 AS-ABC123-001 

Цветовые коды в этом случае будут 001 , 0165 , M2235 и 001 . Каким будет лучший способ выбрать их в своей колонке?

Я думаю, что следующее делает то, что вы хотите:

 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 
  • SQL Query для выбора двух подстрок из известной строки
  • Как создать набор символов в формате даты в MS SQL Server
  • Как вернуть второй символ последнему в строку с использованием SQL
  • MS SQL Вставить в concat
  • Использование подстроки, в ISNULL в TSQL возвращает неожиданное количество символов для поля
  • SQL Server - выберите целое число, которое находится между скобками ()
  • SQL Server: разделите строку в инструкции SELECT
  • Как извлечь часть строки на основе символов на SQL-сервере?
  • Использование CharIndex, Len и подстроки для поиска определенной информации из столбца
  • Возвратите SUBSTRING с известным символом префикса и суффикса
  • Выбор одного слова из поля с использованием SQL
  • Interesting Posts

    Выберите & Группировать на UserID, где Тип транзакции соответствует определенному заказу и в течение 30 минут

    Возврат Max date в SQL Server

    Иерархический идентификатор SQL 2008 с несколькими корневыми узлами

    SQL Server 2005 сравнивает даты

    Как sql обрабатывает несколько LEFT JOINS

    Вычислить временное потребление запроса

    Каково число в скобках на ярлыке вкладки sql-скрипта в VS2010?

    Невозможно совместить значения между тире

    Как получить записи из одного столбца, так что нет связи со значением в другом столбце

    проверьте, существует ли таблица, используя объект подключения в java

    Простой SQL-запрос не будет работать при использовании предложения in

    Выбор наиболее эффективных ответов

    хранимая процедура не вставляет значения в таблицу

    Как определить, содержит ли поле varchar в SQL любые числовые символы?

    Как сопоставить два поля электронной почты, в которых есть дружественный адрес электронной почты

    Давайте будем гением компьютера.