programing

CONCATing NULL 필드

megabox 2023. 6. 28. 21:34
반응형

CONCATing NULL 필드

이름, 성, 이메일의 세 가지 필드가 있는 테이블이 있습니다.

다음은 더미 데이터입니다.

FirstName | LastName | Email
Adam        West       adam@west.com
Joe         Schmoe     NULL

이제, 내가 한다면,

SELECT CONCAT(FirstName, LastName, Email) as Vitals FROM MEMBERS

단일 null 필드가 있으므로 Joe의 활력소는 null입니다.당신은 이 행동을 어떻게 극복합니까?또한 이것이 MS SQL Server의 기본 동작입니까?

해라

ISNULL(FirstName, '<BlankValue>') -- In SQL Server
IFNULL(Firstname, '<BlankValue>') -- In MySQL

그렇게,

CONCAT(ISNULL(FirstName,''),ISNULL(LastName,''),ISNULL(Email,'')) -- In SQL Server
CONCAT(IFNULL(FirstName,''),IFNULL(LastName,''),IFNULL(Email,'')) -- In MySQL

null 문제 없이 동일한 항목을 반환합니다(null이 있어야 하는 빈 문자열).

보다CONCAT_WS

예:

CONCAT_WS('',NULL,"TEST STRING","TEST STRING 2")

수확량

TEST STRINGTEST STRING 2

이것은 구성하는 것보다 쉽습니다.IFNULL만사에빈 문자열을 구분 기호로 사용할 수 있습니다.

in mysql null은 언젠가 작동하지 않을 것입니다.IFNULL()을 시도합니다.

CONCAT(IFNULL(FirstName,''),IFNULL(LastName,''),IFNULL(Email,''))
SELECT ISNULL(FirstName,'')+ISNULL(LastName,'')+ISNULL(Email,'') as Vitals FROM MEMBERS

권장되지만 CONCAT에 푹 빠진 경우에는 {fn}(으)로 묶으면 다음과 같은 ODBC 기능을 사용할 수 있습니다.

SELECT {fn CONCAT(ISNULL(FirstName,''), ISNULL(LastName,''), ISNULL(Email,''))} as Vitals FROM MEMBERS

첫 번째 <space> 마지막이 필요하고 첫 번째가 null일 때 마지막이 필요한 경우 다음 작업을 수행할 수 있습니다.

ISNULL(FirstName+' ','') + ISNULL(LastName,'')

이름에 공백을 추가했는데, 이 공백은 FirstName에 값이 있어야만 유지됩니다.

각 항목 사이에 공백을 두고 모든 항목을 합치는 방법:

RTRIM(ISNULL(Firstname+' ','') + ISNULL(LastName+' ','') + ISNULL(Email,''))

언제든지 사용할 수 있습니다.CONCAT_NULL_YIELDS_NULL설정...

막 뛰어가다SET CONCAT_NULL_YIELDS_NULL OFF그 다음에null연결은 null이 아닌 텍스트로 표시됩니다.

(MySQL에서 하는 것처럼) 다음과 같은 경우:

#1582 - Incorrect parameter count in the call to native function 'ISNULL'

ISNULL 함수는 COALESCE로 대체할 수 있습니다.

CONCAT(COALESCE(FirstName,''),COALESCE(LastName,''),COALESCE(Email,''))

스테판의 대답은 정확합니다.조금 더 자세히 조사하려면 NULL이 Nothing(없음)과 동일하지 않다는 것을 알아야 합니다.Null은 값이 없거나 정의되지 않은 값을 나타냅니다.실제로 값인 빈 문자열을 나타내는 것은 없습니다.

정의되지 않음 + 임의의 항목 = 정의되지 않음

보유하기 좋은 데이터베이스 tidbit!

MS SQL Server 2012부터는 MSDN에 따라 CONCAT 기능이 도입되었습니다.

null 값은 암묵적으로 빈 문자열로 변환됩니다.모든 인수가 null이면 varchar(1) 유형의 빈 문자열이 반환됩니다.

그래서 IsNull 없이 CONCAT를 사용하기에 충분합니다.

CONCAT(FirstName, LastName, Email)

SQL Server에 다음이 없습니다.CONCAT기능.
(업데이트:MS SQL Server 2012부터 CONCAT 기능이 도입됨)

기본 SQL Server 동작에서 NULL은 식을 통해 전파됩니다.

SQL Server에서는 다음과 같이 기록합니다.

SELECT FirstName + LastName + Email as Vitals FROM MEMBERS

처리해야 할 경우NULLs:

SELECT ISNULL(FirstName, '') + ISNULL(LastName, '') + ISNULL(Email, '') as Vitals FROM MEMBERS

MS 액세스의 경우

옵션 1) (이름 + " + " + " + " + " + 이메일)을 구성원의 바이탈로 선택합니다. null인 필드의 경우 빈 결과가 나타납니다.

옵션 2) (FirstName & " & Last Name & " & Email)을 Vitals From Members(구성원으로부터 활력소)로 선택합니다. 필드 대신 Null로 Space를 받게 됩니다.

이 질문에 대한 답을 관찰한 후에는 모든 답을 하나의 간단한 솔루션으로 결합할 수 있습니다.

CONCAT_WS(',',
IF(NULLIF(FirstName, '') IS NULL, NULL, FirstName),
IF(NULLIF(LastName, '') IS NULL, NULL, usr_lastname),
IF(NULLIF(Email, '') IS NULL, NULL, Email))

간단히 말해서, 우리는CONCAT_WS를 의들그분것들리는하을연고결우로 합니다.,그리고 그것에 주목하세요.NULL 렁논두EMPTY되지 않음

NULLIF는 필드가 다음인지 확인합니다.NULL또는EMPTY공백만 포함하거나 비어 있는 필드(예: ', ') 및 출력은 다음 중 하나입니다.NULL또는NOT NULL

IF Will이 필드를 앞지르지 않으면 아웃풋합니다.NULL또는EMPTY

언급URL : https://stackoverflow.com/questions/1035819/concating-null-fields

반응형