문제

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top