programing

잠재적으로 NULL 또는 빈 값이 있는 조건부 CONCAT

telebox 2023. 9. 24. 12:45
반응형

잠재적으로 NULL 또는 빈 값이 있는 조건부 CONCAT

아래 코드에서는 주소의 여러 부분을 연결하여 주소 필드를 만들고 있습니다.

하지만, 예를 들면address2비어있었다, 뒤에.,주소로 연결됩니다.

즉, 모든 필드가 비어 있으면 결과는 다음과 같습니다.,,,,.

한다면address1"House Number"그리고 다른 건 다 비어있고 결국엔House Number,,,,.

CONCAT( COALESCE(address1,'')   ,   ', '    , 
        COALESCE(address2,'')   ,   ', '    , 
        COALESCE(address3,'')   ,   ', '    , 
        COALESCE(city,'')       ,   ', '    , 
        COALESCE(zip, '')
) AS Address, 

주소 부분의 내용이 비어 있지 않은 경우에만 주소 부분 사이에 쉼표를 조건부로 배치하는 방법이 있습니까?

(사이비 코드)의 선을 따라 있는 것과 같은 것.IF(address1) is NULL use '' ELSE use ','

감사해요.

CONCAT_WS(', ',
        IF(LENGTH(`address1`),`address1`,NULL),
        IF(LENGTH(`address2`),`address2`,NULL),
        IF(LENGTH(`address3`),`address3`,NULL),
        IF(LENGTH(`city`),`city`,NULL),
        IF(LENGTH(`zip`),`zip`,NULL)
)

사용.CONCAT_WS매트의 말대로 아주 좋은 생각이지만, 난 다른 방식으로, 지저분하게 말입니다.IF()문:

CONCAT( COALESCE(address1,''), IF(LENGTH(address1), ', ', ''), 
        COALESCE(address2,''), IF(LENGTH(address2), ', ', ''), 
        COALESCE(address3,''), IF(LENGTH(address3), ', ', ''), 
        COALESCE(city,''), IF(LENGTH(city), ', ', ''), 
        COALESCE(zip,''), IF(LENGTH(address1), ', ', ''), 
) AS Address, 

IF()s 필드에 길이가 있는지 확인하고, 만약 그렇다면 쉼표를 반환합니다.그렇지 않으면 빈 문자열을 반환합니다.

…과 함께 해 보다

SELECT MAKE_SET(11111,`address1`,`address2`,`address3`,`city`,`zip`) AS Address

모든 NOT NULL 값이 다음으로 구분된 문자열을 반환합니다.,

CONCAT_WS(', ',
        NULLIF(`address1`,''),
        NULLIF(`address2`,''),
        NULLIF(`address3`,''),
        NULLIF(`city`,''),
        NULLIF(`zip`,'')
)
  • CONCAT_WS는 NULL이 아닌 문자열을 결합합니다.
  • NULLIF는 왼쪽과 오른쪽이 같으면 NULL을 씁니다.이 경우 값이 빈 따옴표 '와 같으면.

언급URL : https://stackoverflow.com/questions/7751597/conditional-concat-with-potentially-null-or-empty-values

반응형