문제
3 개의 필드, FirstName, LastName 및 이메일이있는 테이블이 있습니다.
더미 데이터는 다음과 같습니다.
FirstName | LastName | Email
Adam West adam@west.com
Joe Schmoe NULL
이제 내가한다면 :
SELECT CONCAT(FirstName, LastName, Email) as Vitals FROM MEMBERS
단일 널 필드가 있으므로 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
널 문제없이 같은 것을 반환합니다 (그리고 널이없는 빈 끈이 있습니다).
다른 팁
보다 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
먼저 필요한 경우u003Cspace> 마지막으로하지만 처음은 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은 값의 부재, 즉 정의되지 않은 것을 나타냅니다. 실제로 값인 빈 문자열을 나타내는 것은 없습니다.
정의되지 않은 + 뭐든지 = 정의되지 않았습니다
좋은 데이터베이스 tidbit를 붙잡을 수 있습니다!
당신이 얻는다면 (mySQL에서처럼) :
#1582 - Incorrect parameter count in the call to native function 'ISNULL'
Coalesce를 통해 iSnull 기능을 대체 할 수 있습니다.
CONCAT(COALESCE(FirstName,''),COALESCE(LastName,''),COALESCE(Email,''))
MS SQL Server 2012에서 시작하여 CONCAT 기능과 MSDN에 따르면
NULL 값은 암시 적으로 빈 문자열로 변환됩니다. 모든 인수가 NULL 인 경우 빈 타입 바르 차 (1)가 반환됩니다.
따라서 isnull없이 CONCAT를 사용하는 것으로 충분합니다
CONCAT(FirstName, LastName, Email)
SQL Server에는 a가 없습니다 CONCAT
기능.
(업데이트 : MS SQL Server 2012에서 시작합니다 CONCAT 기능이 소개되었습니다)
기본 SQL 서버 동작에서 NULLS는 표현식을 통해 전파됩니다.
SQL Server에서는 다음과 같습니다.
SELECT FirstName + LastName + Email as Vitals FROM MEMBERS
처리 해야하는 경우 NULL
에스:
SELECT ISNULL(FirstName, '') + ISNULL(LastName, '') + ISNULL(Email, '') as Vitals FROM MEMBERS
MS 액세스의 경우
옵션 1) 선택 (FirstName + "" + lastName + "" + email)을 멤버로부터 활력으로 선택하십시오.
옵션 2) 선택 (FirstName & ""& lastName & ""& email)을 멤버로부터 활력으로 선택하십시오.
이 질문에 대한 답변을 관찰 한 후에는 모든 질문을 하나의 간단한 솔루션으로 결합 할 수 있습니다.
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
연결되지 않습니다
널리프 필드가 있는지 확인합니다 NULL
또는 EMPTY
, 공백 만 포함하거나 비어있는 필드, 예 : '', '') 및 출력은 NULL
또는 NOT NULL
만약에 그렇지 않은 경우 필드를 배치 할 것입니다 NULL
또는 EMPTY