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
'source' 카테고리의 다른 글
Python 목록의 True Bohan 수 계산 (0) | 2023.04.12 |
---|---|
Excel VBA 함수 결과 새로 고침 (0) | 2023.04.12 |
Bash 스크립트 오류 [: !=: 단항 연산자가 필요합니다. (0) | 2023.04.12 |
열거형을 목록으로 변환 (0) | 2023.04.12 |
WPF-MVVM: ViewModel에서 UI 제어 포커스 설정 (0) | 2023.04.12 |