source

SQL Server 문자열과 Null 연결

ittop 2023. 4. 12. 22:58
반응형

SQL Server 문자열과 Null 연결

여러 필드에 걸쳐 계산된 열을 만들고 있습니다. 일부 필드는 null일 수 있습니다.

문제는 이러한 필드 중 하나가 null일 경우 계산된 열 전체가 null이 된다는 것입니다.Microsoft 문서에서 SET CONCAT_NULL_ILLLS_NULL 설정을 통해 이 기능을 해제할 수 있다는 것을 알고 있습니다.단, SQL Server의 다른 부분에 미치는 영향을 모르기 때문에 이 기본 동작을 변경하고 싶지 않습니다.

열이 늘인지 확인하고 늘이 아니면 계산식 안에만 내용을 추가할 수 있는 방법이 있습니까?

사용할 수 있습니다.ISNULL(....)

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

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

SQL Server 2012부터는 이 기능이 훨씬 쉬워졌습니다.

그것은 치료한다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 대신 빈 문자열이 반환됩니다.

CASE를 사용할 수도 있습니다.아래의 내 코드는 늘 값과 빈 문자열을 모두 체크하고, 뒤에 이어지는 값이 있는 경우에만 구분자를 추가합니다.

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 

사용하다

SET CONCAT_NULL_YIELDS_NULL  OFF 

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

이 옵션은 권장되지 않으므로 사용하지 마십시오.상세한 것에 대하여는, 메뉴얼을 참조해 주세요.

필드가 NULL인지 아닌지에 따라 문자열 사이에 구분 기호를 추가하는 데 도움이 필요한 경우 이 기능을 제공합니다.

따라서 개별 필드에서 한 줄의 주소를 작성하는 예에서는

주소1, 주소2, 주소3, 시구정촌, 우편번호

내 경우, 내가 원하는 대로 작동하는 것처럼 보이는 다음과 같은 Calculated Column이 있습니다.

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

그게 도움이 됐으면 좋겠네요!

ISNULL(ColumnName, '')

저도 이것 때문에 많이 힘들었어요.위의 예에서는 사용할 수 없었지만, 저는 이것으로 충분합니다.

Replace(rtrim(ltrim(ISNULL(Flat_no, '') + 
' ' + ISNULL(House_no, '') + 
' ' + ISNULL(Street, '') + 
' ' + ISNULL(Town, '') + 
' ' + ISNULL(City, ''))),'  ',' ')

[ Replace ]는 공백 사이에 아무것도 없는 단일 공간을 연결함으로써 발생하는 이중 공간을 수정합니다.r/ltrim은 끝에 있는 공백을 제거합니다.

SQL Server:

insert into Table_Name(PersonName,PersonEmail) values(NULL,'xyz@xyz.com')

PersonName is varchar(50), NULL is not a string, because we are not passing with in single codes, so it treat as NULL.

코드 이면:

string name = (txtName.Text=="")? NULL : "'"+ txtName.Text +"'";
string email = txtEmail.Text;

insert into Table_Name(PersonName,PersonEmail) values(name,'"+email+"')

이 예는 삽입문을 작성하는 동안 다양한 유형을 처리하는 데 도움이 됩니다.

select 
'insert into doc(Id, CDate, Str, Code, Price, Tag )' + 
'values(' +
      '''' + convert(nvarchar(50), Id) + ''',' -- uniqueidentifier
    + '''' + LEFT(CONVERT(VARCHAR, CDate, 120), 10) + ''',' -- date
    + '''' + Str+ ''',' -- string
    + '''' + convert(nvarchar(50), Code)  + ''',' -- int
    + convert(nvarchar(50), Price) + ',' -- decimal
    + '''' + ISNULL(Tag, '''''') + '''' + ')'  -- nullable string

 from doc
 where CDate> '2019-01-01 00:00:00.000'

언급URL : https://stackoverflow.com/questions/2916791/sql-server-string-concatenation-with-null

반응형