2014-12-15 3 views
2

의 유착을 사용하는 방법은에 의해 검색된 하나에 활용하는 방법을 모르는 :대신 IS NULL>

SELECT 
    AddressLine1 + ', ' + AddressLine2 AS Address, 
    City 
FROM 
    [Person].[Address] 
WHERE 
    [AddressLine1] is not null 
    AND [AddressLine2] is not null 

나는 COALESCE() 기능을 사용해야합니다. 시도 할 때마다 오류가 발생합니다. 같은 것을 얻으려면 coalesce()을 어떻게 사용해야합니까?

+5

'Coalesce'와'is null'은 2 개의 서로 다른 표현식입니다. '널 (null)'값을 가진 컬럼이 있고 그 값을 다른 값 (그러나 동일한 데이터 유형)으로 변환하려면'coalesce'를 사용하십시오. 예를 들어,'where colaesce (addressline1, '') <> '''... – sgeddes

+0

COALESCE는 CASE 표현식의 구문 설탕으로 ELSE가 –

답변

4

당신은 그렇게 할 수 없습니다. COALESCE은 첫 번째 null이 아닌 값을 반환하는 함수입니다.

난 당신이 쿼리 작성하는 목적으로 생각 :

SELECT AddressLine1 +', '+ AddressLine2 AS Address, City FROM [Person].[Address] 
WHERE COALESCE([AddressLine1], [AddressLine2]) is not null 

그것은 같은 효과를 것 같은 :

SELECT AddressLine1 +', '+ AddressLine2 AS Address, City FROM [Person].[Address] 
WHERE [AddressLine1] is not null OR [AddressLine2] is not null 

당신의 AND 대이 쿼리에 OR 사이의 차이가 작지만 너무나 중요합니다. 그 외에도별로 짧지 않고 빠르며 읽기가 쉽지 않아 COALESCE의 좋은 유스 케이스라고 생각하지 않습니다. 값이 NULL을 경우에도, 당신은 문자열 연결을 할 수

SELECT COALESCE(AddressLine1, '') +', '+ COALESCE(AddressLine2, '') AS Address, City 
FROM [Person].[Address]; 

그 방법 :

+4

인 곳입니다. 또한 where 필터에서 함수를 사용하면 더 많은 동일한 정의가있는 계산 열이 없으면 쿼리 최적화 프로그램이 통계 또는 인덱스를 사용하는 것이 불가능합니다. –

+0

예, 좋은 생각은 아니지만 데이터베이스 코스의 작업 중 하나입니다. OR은 (는) AND와는 거리가 멀지 만 두 경우 모두 COALESCE를 사용하는 것이 좋습니다. – malloa

0

아마, 당신은 이런 식으로 뭔가를 할 수 있습니다.

+0

그것은 AddressLine1과 coma 및 space를 표시 한 다음 아무것도 표시하지 않습니다. 그리고 두 번째 열은 '아무것도'하지 않습니다. – malloa