2015-03-30 3 views
0

Мой ЗЕЬЕСТ читает что-то вроде этого:Устранение пробелов в каскадных значений при нулевой

SELECT JKLL.LKJJ, LKJF.ASLKD, TRIM (ADDR.UNNBR) || ' ' || TRIM(ADDR.PREDIR) || ' ' ||, TRIM(ADDR.STREET) ....

Где UNNBR это номер адреса и PREDIR является predirection() с.ш. ю.ш. в.д. з.д..

При конкатенации в тот же столбец, если predir равно null, я получаю два пробела между UNNBR и STREET, очевидно.

Могу ли я использовать оператор case, чтобы исключить это пространство, когда PREDIR имеет значение NULL? Если да, то каким будет синтаксис?

+1

Какие СУБД вы используете? Синтаксис варьируется между ними. –

+0

вы должны использовать sql 'COALESCE' – BeNdErR

+0

О, извините. SQL Server – timtimsheroo

ответ

0

я иногда сделать что-то подобное для таких ситуаций:

(синтаксис TSQL)

SELECT 
CASE WHEN ADDR.UNNBRIS IS NOT NULL THEN ADDR.UNNBR + ' ' ELSE '' END + 
CASE WHEN ADDR.PREDIR IS NOT NULL THEN ADDR.PREDIR + ' ' ELSE '' END + 
... 

Таким образом, вы только получить место, если поле не равно нулю.

0

Я хотел бы использовать ISNULL

SELECT JKLL.LKJJ, LKJF.ASLKD, TRIM(ADDR.UNNBR) + ISNULL(' ' + TRIM(ADDR.PREDIR),'') ... 
0

NULL значение сцепляются к чему дает NULL. Так что-то вроде этого будет работать:

WITH ex as 
    (SELECT 'Pants' as item, null as other, 'George' as name) 
SELECT COALESCE(item + ' ', '') 
    + COALESCE(other + ' ', '') 
    + COALESCE(name + ' ', '') 
FROM ex 
+0

Это просто изменит его значения NULL на пробелы. Если поле пустое, он будет иметь два пробела подряд. – Jim

+0

Я могу посмотреть, что он делает, просто посмотрев на код ... но чтобы вас юмора, когда запрос запущен, вы получите следующее: 'Pants George' Здесь два места. EDIT. По-видимому, одно из мест удаляется, когда я публикую комментарий (derned HTML). Однако есть два пробела. – Jim

+0

@ Jim, да, я не думал четко (сразу же удалил свой предыдущий комментарий после его публикации). Ответ отредактирован. –

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