Объединение функций LTRIM и RTIM и REPLACE в MSSQL
У меня есть поле в таблице, в котором есть как ведущие, так и конечные символы, которые я хотел бы удалить.
Это утверждение
SELECT FullName AS Category FROM dbo.inventory
производит этот результат в таблице (показан частичный результат):
- Детали – Ремни: Z.360J8
- Детали – Ремни: Z.360J14
- Детали – Ремни: Z.36355-123
- Детали – Пластмассы и каркас: Z.103196-001
- Запчасти – Электрические кабели / шнуры: Z.P037153674
Я хотел бы удалить перед тире, который удалит «Части -» и все, переходящие к двоеточию: «поэтому меня можно оставить только с категорией и получить таблицу следующим образом:
- Ремни
- Ремни
- Ремни
- Пластмассы и рамка
- Электрические кабели / шнуры
Я пробовал это и успешно удалял предыдущие «Части», но успешно сочетал оператор с удалением всего после двоеточия «:»
SELECT LTRIM (RTRIM (REPLACE (FullName, 'Parts -', ''))) AS Category FROM dbo.inventory
Производит этот результат:
- Ремни: Z.360J8
- Ремни: Z.360J14
- Ремни: Z.36355-123
- Пластмассы и каркас: Z.103196-001
- Электрические кабели / шнуры: Z.P037153674
Спасибо за помощь!
Метод с использованием LEFT & CHARINDEX:
SELECT REPLACE(LEFT(FullName, CHARINDEX(':', FullName) - 1), 'Parts - ', '')
CHARINDEX находит номер индекса символа двоеточия в полной строке, -1 включен для его удаления. LEFT затем усекает строку в эту позицию. Функция REPLACE, как и в вашем первоначальном примере, удаляет часть «Parts -» (обратите внимание, что я включил пробел после дефиса).
LTRIM и RTRIM удаляют только верхние / конечные пробелы соответственно, поэтому они не будут полезны здесь.
Код для обработки строк, не содержащих двоеточия (возвращает пустую строку):
SELECT REPLACE(REPLACE(LEFT(Fullname, CHARINDEX(':', Fullname)), 'Parts - ', ''), ':', '')