[sql-server] Null을 사용한 SQL Server 문자열 연결

일부 필드가 잠재적으로 null 인 계산 열을 만들고 있습니다.

문제는 이러한 필드 중 하나라도 null이면 전체 계산 열이 null이된다는 것입니다. Microsoft 설명서에서 이것이 예상되며 SET CONCAT_NULL_YIELDS_NULL 설정을 통해 해제 할 수 있음을 이해합니다. 그러나 SQL Server의 다른 부분에 미치는 영향을 모르기 때문에이 기본 동작을 변경하고 싶지 않습니다.

열이 null인지 확인하고 null이 아닌 경우 계산 된 열 수식 내에 해당 내용 만 추가하는 방법이 있습니까?



답변

당신이 사용할 수있는 ISNULL(....)

SET @Concatenated = ISNULL(@Column1, '') + ISNULL(@Column2, '')

열 / 표현식의 값이 실제로 NULL이면 지정된 두 번째 값 (여기서는 빈 문자열)이 대신 사용됩니다.


답변

SQL Server 2012에서는이 CONCAT기능이 훨씬 쉬워 졌습니다.

NULL빈 문자열로 취급

DECLARE @Column1 VARCHAR(50) = 'Foo',
        @Column2 VARCHAR(50) = NULL,
        @Column3 VARCHAR(50) = 'Bar';


SELECT CONCAT(@Column1,@Column2,@Column3); /*Returns FooBar*/


답변

COALESCE를 사용하십시오 . 대신에 your_column사용 COALESCE(your_column, ''). NULL 대신 빈 문자열을 반환합니다.


답변

사용하다

SET CONCAT_NULL_YIELDS_NULL  OFF

null 값을 문자열에 연결해도 null이 발생하지 않습니다.

이것은 더 이상 사용되지 않는 옵션이므로 사용하지 마십시오. 자세한 내용은 설명서 를 참조하십시오.


답변

CASE를 사용할 수도 있습니다. 아래 코드는 null 값과 빈 문자열을 모두 확인하고 따라야 할 값이있는 경우에만 구분자를 추가합니다.

SELECT OrganisationName,
'Address' =
CASE WHEN Addr1 IS NULL OR Addr1 = '' THEN '' ELSE Addr1 END +
CASE WHEN Addr2 IS NULL OR Addr2 = '' THEN '' ELSE ', ' + Addr2 END +
CASE WHEN Addr3 IS NULL OR Addr3 = '' THEN '' ELSE ', ' + Addr3 END +
CASE WHEN County IS NULL OR County = '' THEN '' ELSE ', ' + County END
FROM Organisations


답변

필드가 NULL 인지 여부에 따라 문자열 사이에 구분 기호를 추가하는 데 도움이 필요한 사람이 있으면 기여하고 싶었습니다 .

따라서 별도의 필드에서 한 줄 주소를 만드는 예에서

Address1 , Address2 , Address3 , City , PostCode

제 경우에는 원하는대로 작동하는 것처럼 보이는 다음 계산 열이 있습니다.

case
    when [Address1] IS NOT NULL
    then (((          [Address1]      +
          isnull(', '+[Address2],'')) +
          isnull(', '+[Address3],'')) +
          isnull(', '+[City]    ,'')) +
          isnull(', '+[PostCode],'')
end

누군가에게 도움이되기를 바랍니다!


답변

ISNULL(ColumnName, '')