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
NULL
s 를 처리해야하는 경우 :
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
'programing tip' 카테고리의 다른 글
Eclipse에서 여러 스레드 디버깅 (0) | 2020.12.06 |
---|---|
fedora에서 mariadb의 기본 비밀번호는 무엇입니까? (0) | 2020.12.06 |
std :: string을 벡터로 분할하는 올바른 방법 (0) | 2020.12.06 |
EditText의 Android 키보드 다음 버튼 문제 (0) | 2020.12.06 |
JavaScript를 사용하여 HTML 16 진수 색상 코드를 무작위로 생성하는 방법은 무엇입니까? (0) | 2020.12.06 |