2013-04-04 4 views
0

У меня есть запрос SQL, который показывает Адрес1 в поле и ADDRESS2 как «Адрес1, address2'.My запроскак проверить пустое поле в SQL

(S.Address1 + ' , ' + S.Address2)as Address1 

Но когда значения в ADDRESS2 пусто это показывает 'Адрес1,' и мне нужно, чтобы показать только address1.How может я удалить запятую

ответ

3

JW близка, я думаю, но фактическая формула, которую вы хотите, я считаю, такова:

S.Address1 + COALESCE(' , ' + NULLIF(S.Address2,''),'') as Address1 

(ниже не имеет значения, так как OP теперь сказал, что значение столбца пусто, не NULL)

Но есть еще одна проблема - выше не будет работать (пока), потому что вы по-видимому, CONCAT_NULL_YIELDS_NULL установлен на OFF. Это нужно включить (как правило, установив ANSI_NULLS в ON), since:

В будущей версии SQL Server CONCAT_NULL_YIELDS_NULL всегда будет ON и любые приложения, которые явно установить опцию OFF выдаст ошибку. Избегайте использования этой функции в новых разработках и планируйте изменять приложения, которые в настоящее время используют эту функцию.

+0

Можете ли вы сказать мне точную разницу между COALESCE и ISNULL? – Anilkumar

+0

@ Anilkumar - 'ISNULL' - это диалект T-SQL, ограничивается только двумя входами и заставляет тип результата быть таким же, как и тип его первого ввода, независимо от того, как обычно говорят правила приоритета типа. «COALESCE» является стандартным SQL, распространяется на несколько входов (возвращает первое значение, отличное от NULL), и выполняет нормальный тип, чтобы определить тип результата. За пределами нескольких краевых случаев (здесь нет) я всегда выбирал «COALESCE». –

+0

@Anilkumar http://dba.stackexchange.com/questions/4274/performance-difference-for-coalesce-versus-isnull – Lamak

5

использование COALESCE

(COALESCE(S.Address1,'') + ' , ' + COALESCE(S.Address2, '')) as Address1 

но проблема выше утверждения является то, что он будет иметь задний , когда address2 имеет нулевое значение, чтобы исправить

(COALESCE(S.Address1,'') + COALESCE(' , ' + S.Address2, '')) as Address1 

UPDATE 1

CASE WHEN S.Address2 = '' 
    THEN S.Address1 
    ELSE S.Address1 + ' , ' + S.Address2 
END AS Addrss 
+0

+1 для COALESCE вместо ISNULL, так как сливаются в SQL Standand –

+1

не работает .... на самом деле мои поля не «null», это пусто – Anilkumar

+3

Нужно поместить запятую во второй «COALESCE». –

1
SELECT CONCAT(Address1          -- concatenation of address 1 with.. 
      , CASE WHEN ISNULL(NULLIF(Address2, ''))   -- if address 22 is null or empty 
      THEN ''          -- concat with nothing 
      ELSE CONCAT(' , ', Address2)    -- else concat with a comma and address 2 
      END 
     ) 

Sqlfiddle here

Линия CASE WHEN ISNULL(NULLIF(Address2, '')) для определения, если address2 является нулевым или пустым. Details can be found here.

1

Если address2 может быть нулевым или пустой строкой, или просто пустое пространство, вам нужно что-то вроде:

select address1 + 
case when length(trim(ifnull(address2, ''))) > 0 then ', ' + address2 
else '' end 
Смежные вопросы