Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Обрезать запятую в конце строки.  [new]
Леша777
Guest
Есть таблица :
DECLARE @Address TABLE 
                                   (
                                       id int not null identity (1,1)
                                      ,line2 nvarchar(500) NULL
                                    )

INSERT @Address 
                        (
                       
                           line2 

                        )

SELECT
             N'BBB, '

UNION ALL 
SELECT 
           N'BBB,AAA'

UNION ALL 
SELECT 'DDD,'
UNION ALL 
SELECT N'BBC'

Нужно обрезать в строках (line2) запятую если она строка на нее заканчивается(с учетом пробела, т.е N'AAA, ' должна стать N'AAA' и N'AAA,' - N'AAA' ). Т.е обрезать запятую справа.
Запятая попала в результате импорта и необхомо исправить существующие данные и в дальнейшем не допускать, поэтому скорость обработки критична.

Я сделал вот так :
SELECT a.line2,  LEFT(a.line2, (DATALENGTH(a.line2)/ 2) - CHARINDEX(N',', REVERSE(a.line2)))
FROM @Address  a
WHERE LTRIM(REVERSE(a.line2)) LIKE N',%'

Можно как-нибудь быстрее ? Как-то сложно я сделаю думаю, можно проще и быстрее, посоветуйте что-нибудь.

Версия 2005 sp3.
Cпасибо.
2 окт 09, 17:50    [7736714]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать запятую в конце строки.  [new]
aleks2
Guest
Быстрее - врядли, а вот не так ужасающе...
SELECT a.line2,  LEFT(a.line2, LEN(RTRIM(a.line2))-1)
FROM @Address  a
WHERE SUBSTRING(a.line2, LEN(RTRIM(a.line2)), 1)=','
2 окт 09, 18:07    [7736768]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать запятую в конце строки.  [new]
aleks2
Guest
О, блин, совсем забыл... как LEN длину определяет...

SELECT a.line2,  LEFT(a.line2, LEN(a.line2)-1)
FROM @Address  a
WHERE SUBSTRING(a.line2, LEN(a.line2), 1)=','
2 окт 09, 18:10    [7736780]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать запятую в конце строки.  [new]
sander1
Member

Откуда: Москва
Сообщений: 366
Если нужна скорость, а по полю "a" есть индекс, то лучше строить выражение where так, чтобы на поле "a" не накладывалось никаких функций. Например так:

where a like '%,[ ]' or a like '%,'
2 окт 09, 18:51    [7736907]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать запятую в конце строки.  [new]
aleks2
Guest
sander1
Если нужна скорость, а по полю "a" есть индекс, то лучше строить выражение where так, чтобы на поле "a" не накладывалось никаких функций. Например так:

where a like '%,[ ]' or a like '%,'


like '%тра-ля-ля'
НИЧЕМ не лучше функции.
2 окт 09, 18:58    [7736927]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать запятую в конце строки.  [new]
vino
Member

Откуда:
Сообщений: 1191
aleks2, возможно, быстрее сработает
WHERE CHARINDEX(',', a.line2, LEN(RTRIM(a.line2))-1) > 0
если запятая справа только одна и после нее только пустые или спец. символы
5 окт 09, 12:55    [7742281]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать запятую в конце строки.  [new]
sander1
Member

Откуда: Москва
Сообщений: 366
aleks2
НИЧЕМ не лучше функции.


Не бейте ногами дилетанта, но по моему все-таки лучше!
5 окт 09, 16:01    [7743590]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать запятую в конце строки.  [new]
Glory
Member

Откуда:
Сообщений: 104760
sander1
aleks2
НИЧЕМ не лучше функции.


Не бейте ногами дилетанта, но по моему все-таки лучше!

А like уже умеет использовать индекс для поиска с середины строки ?
5 окт 09, 16:07    [7743640]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать запятую в конце строки.  [new]
sander1
Member

Откуда: Москва
Сообщений: 366
Да, я ошибся, проверял только по началу строки.
5 окт 09, 16:16    [7743726]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить