2013-03-11 2 views
1
UPDATE PropertyInformationDump 
    SET RegistryAdd = COALESCE(NULLIF(b.OCAREOF, ''), b.OCAREOF + ', ','') + 
     COALESCE(NULLIF(b.O1STADD, ''), b.O1STADD + ', ','') + 
     COALESCE(NULLIF(b.O2NDADD, '') + b.O2NDADD + ', ','') + 
     COALESCE(b.OSTNAME + ', ','') + COALESCE(b.OCITYST + ' ','') + 
     COALESCE(NULLIF(b.OZIP, ''), b.OZIP,'') 
    FROM dbo.vw_BRT b 
WHERE BRTNumber = b.PARCEL 
GO 

Вы хотите удалить запятые, находящиеся перед этими комбинированными строками. Вот пример того, что происходит:Удалить Ведущие Запястья через Coalasce и NULLIF?

, , 1350 SUSQUEHANNA AVE, PHILADELPHIA PA 19125 
MICHAEL J CARLONE, 10050 ROOSEVELT BLVD, PHILADELPHIA PA 191163924 

нужно, чтобы всегда выглядеть следующим образом:

1350 SUSQUEHANNA AVE, PHILADELPHIA PA 19125 

или просто как один с OCAREOF заполнены:

MICHAEL J CARLONE, 10050 ROOSEVELT BLVD, PHILADELPHIA PA 191163924 

мне нужно избавиться от этих запятых, если поле пустое или пустое. Видимо, я делаю это неправильно!

+0

Какие СУБД вы используете? Я не думаю, что вам нужен COALESCE в вашем синтаксисе, NULLIF и добавление запятой должны позаботиться обо всем этом –

+0

SQL Server 2005 – korrowan

ответ

1

с помощью SQL Server 2005 должно работать

UPDATE PropertyInformationDump 
SET RegistryAdd = 
    CASE WHEN Len(b.OCAREOF) > 0 THEN b.OCAREOF + ',' ELSE '' END + 
    CASE WHEN Len(b.O1STADD) > 0 THEN b.O1STADD + ',' ELSE '' END + 
    CASE WHEN Len(b.O2NDADD) > 0 THEN b.O2NDADD + ',' ELSE '' END + 
    CASE WHEN Len(b.OSTNAME) > 0 THEN b.OSTNAME + ',' ELSE '' END + 
    CASE WHEN Len(b.OCITYST) > 0 THEN b.OCITYST+ ',' ELSE '' END + 
    CASE WHEN Len(b.OZIP) > 0 THEN b.OZIP+ ',' ELSE '' END 
FROM dbo.vw_BRT b 
WHERE BRTNumber = b.PARCEL 

Если поля не содержат данных, вы можете игнорировать использование isNull()

+0

Правильно, но иногда поле пусто, поэтому IsNull по-прежнему вызывает ту же проблему. Я получаю ,,, 1350 SUSQUEHANNA AVE, PHILADELPHIA PA, 19125, с этим кодом. – korrowan

+0

@korrowan Я обновил, чтобы добавить запятую, когда поле не пустое. –

+0

Хорошо, это работает. сделал некоторые корректировки, чтобы получить точную строку, в которой я нуждаюсь, но она работает хорошо. Благодаря! – korrowan

0

Используйте это:

COALESCE(NULLIF(b.OCAREOF + ', ', ''),'') 

UPDATE

Если поля не обнуляемым использовать это:

CASE WHEN LEN(b.OCAREOF) = 0 THEN '' ELSE b.OCAREOF + ', ' END + 
.... 
+0

Если я использую это, я получаю:,,, 1350 SUSQUEHANNA AVE, PHILADELPHIA PA 19125 – korrowan

+0

@korrowan Ты уверен? Можете ли вы предоставить какие-либо данные теста на http://sqlfiddle.com? –

+0

@korrowan Ваши поля пусты ('') или NULL? –

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