복붙노트

[SQL] 모든 필드는 NULL이 포함 된 경우 MySQL의 CONCAT는 NULL을 반환

SQL

모든 필드는 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-

해결법

  1. ==============================

    1.COALESCE에 싸서 빈 문자열과 NULL 값을 변환

    COALESCE에 싸서 빈 문자열과 NULL 값을 변환

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

    2.사용 CONCAT_WS 대신 :

    사용 CONCAT_WS 대신 :

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

    3.(당신은 예를 들어 모든 구성원 사이의 같은 구분을하지 않으려면) 다음을 사용 CONCAT 같이 CONCAT_WS에서 같은 유연성을하려면 :

    (당신은 예를 들어 모든 구성원 사이의 같은 구분을하지 않으려면) 다음을 사용 CONCAT 같이 CONCAT_WS에서 같은 유연성을하려면 :

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

    4.

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

    5.첫 번째 필드가 NULL의 경우 CONCAT_WS은 여전히 ​​나를 위해 널 (null)을 생산하고 있습니다. 나는 같이 시작 부분에 제로 길이 문자열을 추가하여 해결

    첫 번째 필드가 NULL의 경우 CONCAT_WS은 여전히 ​​나를 위해 널 (null)을 생산하고 있습니다. 나는 같이 시작 부분에 제로 길이 문자열을 추가하여 해결

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

    하나

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

    첫번째 필드는 NULL 인 경우 Null을 생성한다.

  6. ==============================

    6.아래 같은 경우 문을 사용할 수 있습니다

    아래 같은 경우 문을 사용할 수 있습니다

    select CONCAT(if(affiliate_name is null ,'',affiliate_name),'- ',if(model is null ,'',affiliate_name)) as model from devices
    
  7. from https://stackoverflow.com/questions/15741314/mysql-concat-returns-null-if-any-field-contain-null by cc-by-sa and MIT license