programing tip

NULL 필드 CONCAT

itbloger 2020. 12. 6. 21:16
반응형

NULL 필드 CONCAT


FirstName, LastName 및 Email의 세 필드가있는 테이블이 있습니다.

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

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

이제 내가 할 경우 :

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

단일 null 필드가 있으므로 Joe의 Vitals가 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모든 것을 구성 하는 것 보다 쉽습니다 . 빈 문자열을 구분 기호로 사용할 수 있습니다.


mysql에서 isnull은 잠시 작동하지 않습니다. 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

first <space> last가 필요하지만 first가 null 일 때 마지막이 필요한 경우 다음을 수행 할 수 있습니다.

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

null 일 수있는 firstname에 공백을 추가했습니다. 즉, FirstName에 값이있는 경우에만 공백이 유지된다는 의미입니다.

각각 사이에 공백을두고 모두 합치려면 :

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

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

그냥 실행 SET CONCAT_NULL_YIELDS_NULL OFF하면 모든 null연결이 null이 아닌 텍스트가됩니다.


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

정의되지 않음 + 모든 것 = 정의되지 않음

유지하기에 좋은 데이터베이스 정보!


(MySQL 에서처럼) 얻을 경우 :

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

ISNULL 함수를 COALESCE로 바꿀 수 있습니다.

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

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 Access의 경우

옵션 1) SELECT (FirstName + ""+ LastName + ""+ Email) as Vitals FROM MEMBERS 필드가 null 인 경우 빈 결과가 표시됩니다.

옵션 2) SELECT (FirstName & ""& LastName & ""& Email) from Vitals from MEMBERS 널로 필드 대신 공백을 얻습니다.


After observing the answers for this question, you may combine all of them into one simple solution

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

So, in short we use CONCAT_WS to concatenate our fields and separate them with ,; and notice that NULL fields nor EMPTY wont concatenated

NULLIF will check if the field is NULL or EMPTY, a field that contains only spaces or is empty as well, ex: '', ' ') and the output will be either NULL or NOT NULL

IF Will out put the field if it's not NULL or EMPTY

참고URL : https://stackoverflow.com/questions/1035819/concating-null-fields

반응형