내 테이블 “장치”에 다음 데이터가 있습니다.
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