Изменить строку в SQL Server для сокращения - PullRequest
3 голосов
/ 12 марта 2010

Как мне вернуть все в строке из SQL-запроса перед определенным символом?

Мои данные выглядят так:

HD TV HM45VM - HDTV widescreen television set with 45" lcd

Я хочу ограничить или усечь строку, чтобы включить все до тире.

Таким образом, конечный результат будет "HD TV HM45VM"

Ответы [ 3 ]

6 голосов
/ 12 марта 2010

Используйте SUBSTRING , но вам придется использовать либо CHARINDEX , либо PATINDEX , чтобы получить местоположение символа, в котором вы хотите остановить подстроку:

SELECT SUBSTRING('HD TV HM45VM - HDTV widescreen television set with 45" lcd', 
                  0, 
                  CHARINDEX('-', 'HD TV HM45VM - HDTV widescreen television set with 45" lcd'))

Чтобы сделать наоборот - уберите все слева от дефиса - используйте:

SELECT SUBSTRING('HD TV HM45VM - HDTV widescreen television set with 45" lcd', 
                  CHARINDEX('-', 'HD TV HM45VM - HDTV widescreen television set with 45" lcd') + 1,
                  LEN('HD TV HM45VM - HDTV widescreen television set with 45" lcd'))

По сути, сделайте местоположение дефиса отправной точкой. Тогда вы можете использовать функции LEN или DATALENGTH.

2 голосов
/ 12 марта 2010

Не забывайте, что ЛЕВАЯ существует

select LEFT('HD TV HM45VM - HDTV widescreen television set with 45" lcd',CHARINDEX('-', 'HD TV HM45VM - HDTV widescreen television set with 45" lcd ')-1)
0 голосов
/ 12 марта 2010

Хорошо, я тоже попробую и посмотрю, смогу ли я упростить:

SELECT LEFT(myfield', CHARINDEX(' - ', myfield) - 1)

Оборачивая - в пробелы, с меньшей вероятностью сработает разделитель, и нет необходимости обрезать результат.

Предупреждение: это, как и другие ответы, приведет к ошибке, если myfield не включает разделитель -.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...