2011-12-23 3 views
2

Мои данные выглядитTrimmining столбец с плохими данными

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

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

ID LPNumber 
1  TEST123 
2  TEST1232 

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

ответ

3

Использование CHARINDEX(), LEN() и RIGHT() вместо этого.

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

Если сохраняются пробелы в конце ('SET ANSI PADDING ON' по умолчанию), это приведет к вам, потому что LEN обрезает их первым. Есть метод - мое явное безумие ... – gbn

+1

Это тоже работает. Еще раз спасибо за ответ qucik. –

+0

@gbn - Я никогда не сомневался в вашем безумии :) – MatBailie

6

В меню MSDN REPLACE page в меню слева представлен полный список доступных функций строки.

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

Я дам вам работать (из MSDN) фильтр необходим в случае, если нет в колонке нет # ...

Edit:

Почему 8000?

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

Кроме того, LEN может украсить вас.

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

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

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

+0

+1: избит на 22 секунд. Мне нужны более быстрые пальцы! :) * [Хотя, это выполняется для VARCHAR (max)?] * – MatBailie

+0

@gbn why 8000? : P –

+3

@aF. - Оооо, я не думаю, что было бы неплохо изменить что-то, не отвечающее на вопрос, что это за Typos и т. Д. Причиной для 8000 было бы то, что он подходит для всего, кроме VARCHAR (max) afaik, и, похоже, будет преднамеренным для меня. Если вы не согласны с этим, сделайте комментарий или даже свой собственный ответ, но отредактируйте ответ? Ooooooh ... – MatBailie

Смежные вопросы