[mysql] 필드에 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


답변