IT

필드에 NULL이 포함 된 경우 MySQL CONCAT는 NULL을 반환합니다.

lottoking 2020. 6. 24. 07:21
반응형

필드에 NULL이 포함 된 경우 MySQL CONCAT는 NULL을 반환합니다.


내 테이블 "장치"에 다음 데이터가 있습니다.

affiliate_name  affiliate_location  model     ip             os_type    os_version 

cs1             inter               Dell     10.125.103.25   Linux      Fedora  
cs2             inter               Dell     10.125.103.26   Linux      Fedora  
cs3             inter               Dell     10.125.103.27   NULL       NULL    
cs4             inter               Dell     10.125.103.28   NULL       NULL    

아래 쿼리를 실행했습니다.

SELECT CONCAT(`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`) AS device_name
FROM devices

아래 주어진 결과를 반환합니다

cs1-Dell-10.125.103.25-Linux-Fedora
cs2-Dell-10.125.103.26-Linux-Fedora
(NULL)
(NULL)

NULL을 무시하고 결과는 다음과 같아야합니다.

cs1-Dell-10.125.103.25-Linux-Fedora
cs2-Dell-10.125.103.26-Linux-Fedora
cs3-Dell-10.125.103.27-
cs4-Dell-10.125.103.28-

NULL빈 문자열로 값을 감싸서 변환하십시오 .COALESCE

SELECT CONCAT(COALESCE(`affiliate_name`,''),'-',COALESCE(`model`,''),'-',COALESCE(`ip`,''),'-',COALESCE(`os_type`,''),'-',COALESCE(`os_version`,'')) AS device_name
FROM devices

대신 CONCAT_WS사용하십시오 .

CONCAT_WS ()는 빈 문자열을 건너 뛰지 않습니다. 그러나 separator 인수 뒤의 NULL 값은 건너 뜁니다.

SELECT CONCAT_WS('-',`affiliate_name`,`model`,`ip`,`os_type`,`os_version`) AS device_name FROM devices

CONCAT에서와 같이 CONCAT_WS에서 동일한 유연성을 가지려면 (예를 들어 모든 멤버간에 동일한 구분 기호를 원하지 않는 경우) 다음을 사용하십시오.

SELECT CONCAT_WS("",affiliate_name,':',model,'-',ip,... etc)

SELECT CONCAT(isnull(`affiliate_name`,''),'-',isnull(`model`,''),'-',isnull(`ip`,''),'-',isnull(`os_type`,''),'-',isnull(`os_version`,'')) AS device_name
FROM devices

CONCAT_WS첫 번째 필드가 Null이면 여전히 null을 생성합니다. 처음과 같이 길이가 0 인 문자열을 추가 하여이 문제를 해결했습니다.

CONCAT_WS("",`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`)

하나

CONCAT("",`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`) 

첫 번째 필드가 Null 인 경우 Null을 생성합니다.


아래처럼 if 문을 사용할 수 있습니다

select CONCAT(if(affiliate_name is null ,'',affiliate_name),'- ',if(model is null ,'',affiliate_name)) as model from devices

참고 URL : https://stackoverflow.com/questions/15741314/mysql-concat-returns-null-if-any-field-contain-null

반응형