2016-08-30 132 views
0

我有這個聲明不會出現錯誤,但它不會以我想要的方式添加到電話擴展中。在CONCAT_WS中使用CASE的MySQL陳述

SELECT 
     est_contacts.*, 
     CONCAT_WS(
     ', ', 
     contacts.contact_name, 
     contacts.contact_phone, 
     (
      CASE contacts.contact_ext WHEN NOT '' THEN CONCAT('x', contacts.contact_ext) END 
     ), 
     contacts.contact_phone_type 
    ) AS contact 
    FROM 
     est_contacts 
    LEFT JOIN 
     contacts 
    ON 
     est_contacts.contact_id = contacts.contact_id 
    WHERE 
     est_contacts.est_id = 1 

因此,進出口超新來的CASE東西,所以這是我在這第一炮,它看上去就像是去工作和演戲喜歡它,直到我添加了一個分機到聯繫人記錄,它沒有添加它,即使它是NOT ''

+0

你的情況有沒有別的/違約條款,因此,如果這一場比賽也不會發生,返回什麼都沒有。 –

+0

多數民衆贊成多多少少我想要的,如果它沒有一個分機那麼我想它甚至不包括分機進入CONCAT_WS我只希望它包括它,如果它是預設的,所以電話號碼格式正確 –

回答

1

試着寫的邏輯是這樣的:

(CASE WHEN contacts.contact_ext <> '' THEN CONCAT('x', contacts.contact_ext) 
    END), 
+0

好吧,這樣的工作第一槍100%,你能否詳細說明你的答案,這樣我就能明白爲什麼這樣做了? –

+1

@AlanDoyle:'CASE x WHEN v'語法比較'x'和值'v'。在你的情況下,'v'是表達式'NOT''',因爲空字符串是falsey,所以它的邏輯否定是'1',因此你的版本等同於'CASE contacts.contact_ext WHEN 1 THEN ...'。如果你願意,你可以*做'CASE contacts.contact_ext'然後'然後'否則...'。 – eggyal

+0

ahh好吧,現在更有意義,謝謝! –