2015-11-04 4 views
2

У меня есть следующий рабочий запрос:SQL Server: ВЕРХНИЙ последние пять символов

SELECT 
    REPLACE(
     AddressLine1, RIGHT(AddressLine1, 5), 
     UPPER(RIGHT(AddressLine1, 5)) 
    ) 
FROM Person.Address 

Существует другой способ сделать это?

+1

вы делаете это правильно .. – JamieD77

+0

Your'e right;) – m4tm4t

+1

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

ответ

1

Использование конкатенации:

select left(addressline1, len(addressline1) - 5) + upper(right(addressline1, 5)) 
from person.address; 

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

Хм, вы также можете сделать:

select stuff(addressline1, len(addressline1) - 4, 5, upper(right(addressline1, 5))) 
from person.address; 

Обе эти формулировки предполагают, что addressline1 имеет, по меньшей мере, 5 символов. Если более короткие адреса возможны, то case, вероятно, является самым простым решением.

+0

ваш начальный параметр запуска выключен .. должен быть len (addressline1) - 4' .. ни одна опция не обрабатывает <5 символов (что вы упоминаете) .. я думаю, что у него есть это право – JamieD77

+0

@ JamieD77. , , Метод HIs неверен, потому что я указываю в комментарии и в этом ответе. Фиксирование их для <5 символов тривиально. –

+0

Вы правы, это может произойти с каким-то странным адресом – JamieD77

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