CONCAT MySQL에서 NULL 값을 제외하는 방법은 무엇입니까?


15

내가 이것을 가지고 있다면-tadd는 Address테이블입니다.

CONCAT(tadd.street_number, ' ',
            tadd.street_name,', ',
            tadd.apt_number,', ',
            tadd.city,', ',
            tadd.postal_code,', ',
            tadd.country) AS 'Address'

apt_number가 존재하지 않으면 제외시키는 방법이 있습니까?

나는 생각하고 있었다 :

WHERE tadd.apt_number IS NOT NULL

그러나 그것은로 행을 반환 할 것이고 apt_number, 어떻게 작동하더라도 어떻게 여분의 쉼표를 처리합니까?

중복 된 경우 의견에 링크를 게시하십시오.

답변:


19

NULL빈 문자열이 아닌 값 을 건너 뛰려면 CONCAT_WS()함수 를 사용할 수 있습니다 .

CONCAT_WS( ', ',            -- Separator
           CONCAT_WS(' ', tadd.street_number, tadd.street_name),
           tadd.apt_number,  tadd.city, 
           tadd.postal_code, tadd.country
         ) AS Address

문서에서 :

CONCAT_WS(separator,str1,str2,...)

CONCAT_WS()Concatenate With Separator의 약자로 특수 형식입니다 CONCAT(). 첫 번째 인수는 나머지 인수의 구분 기호입니다. 분리 할 문자열 사이에 구분 기호가 추가됩니다. 나머지 인수와 마찬가지로 구분 기호는 문자열 일 수 있습니다. 구분 기호가 NULL이면 결과는 NULL입니다.

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


8

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

NULL 인 경우 :

SELECT
    CONCAT(IFNULL(tadd.street_number,''),
        ' ',IFNULL(tadd.street_name,''),
        ', ',IFNULL(tadd.apt_number,''),
        ', ',IFNULL(tadd.city,''),
        ', ',IFNULL(tadd.postal_code,''),
        ', ',IFNULL(tadd.country,'')) AS 'Address'
FROM db.tbl;

콜라겐 :

SELECT
    CONCAT(COALESCE(tadd.street_number,''), 
        ' ',COALESCE(tadd.street_name,''),
        ', ',COALESCE(tadd.apt_number,''),
        ', ',COALESCE(tadd.city,''),
        ', ',COALESCE(tadd.postal_code,''),
        ', ',COALESCE(tadd.country,'')) AS 'Address'
FROM db.tbl

3
CONCAT(
    tadd.street_number, ' ', tadd.street_name, ', ',
-- concat() will return null if one is null, so ifnull returns empty string in that case
    IFNULL(CONCAT(tadd.apt_number, ', '), ''),
    tadd.city, ', ', tadd.postal_code, ', ',tadd.country
) AS 'Address'

1
CONCAT_WS('',         -- hack, empty delimiter
        tadd.street_number, ' ',
        tadd.street_name,', ',
        CONCAT(tadd.apt_number,', '), -- hack, this line will become NULL, when apt_number is null, and will be omitted with delimiter
        tadd.city,', ',
        tadd.postal_code,', ',
        tadd.country) AS 'Address'

나도 몰라 SQL을, 만에 MS SQL (TQSL) 솔루션 외모와 같은 :

SELECT
        tadd.street_number + ' ' +
        tadd.street_name + ', ' +
        ISNULL(tadd.apt_number  + ', ', '') +
        tadd.city + ', ' +
        tadd.postal_code + ', ' +
        tadd.country AS 'Address'

또한 NULLapt_number (mysql 다시)뿐만 아니라 모든 필드를 생략 할 수 있습니다 .

SELECT CONCAT_WS(', ',
        CONCAT(tadd.street_number, ' ', tadd.street_name),
        tadd.apt_number,
        tadd.city,
        tadd.postal_code,
        tadd.country) AS 'Address'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.