[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, '')