Обрезка столбца с неверными данными - PullRequest
2 голосов
/ 23 декабря 2011

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

ID    LPNumber 
1     30;#TEST123
2     302;#TEST1232

Как я могу обновить MyText, чтобы отбрасывать все до # и включая #, поэтому у меня осталось следующее:

ID    LPNumber 
1     TEST123
2     TEST1232

Я посмотрел на SQL Server Replace, но не могу придумать надежного способа проверки на наличие ";"

Ответы [ 2 ]

6 голосов
/ 23 декабря 2011

На странице ЗАМЕНА MSDN в меню слева представлен полный список доступных строковых функций.

UPDATE
   MyTable
SET
   LPNumber = SUBSTRING(LPNumber, CHARINDEX('#', LPNumber)+1, 8000);

Я позволю вам обработать (из MSDN) фильтр, необходимый, если в столбце нет # ...

Редактировать:

Почему 8000?

Самая длинная длина строки без LOB составляет 8000, поэтому это сокращение от "до конца строки". Вы также можете использовать 2147483647 для максимального количества столбцов или для обеспечения его согласованности.

Кроме того, ЛЕН может обмануть вас.

  • SET ANSI_PADDING включено по умолчанию
  • LEN игнорирует конечные пробелы

Вам нужно будет использовать DATALENGTH, но тогда вам нужно знать тип данных, потому что он учитывает байты, а не символы. См. https://stackoverflow.com/a/2557843/27535, например

Так что использование магического числа, возможно, меньшее зло ...

3 голосов
/ 23 декабря 2011

Вместо этого используйте CHARINDEX (), LEN () и RIGHT ().

RIGHT(LPNumber, LEN(LPNumber) - CHARINDEX('#', LPNumber, 0))
...