各位好,小弟我又來詢問令人無解的問題了~
底下為我此次所測試的 CASE 查詢語法:
SELECT
CASE
WHEN 1=1 THEN 1
ELSE 'NAN'
END AS aaa,
CASE
WHEN 1=1 THEN 2
ELSE 'NAN'
END AS bbb,
CASE
WHEN 1=1 THEN 3
ELSE 'NAN'
END AS ccc,
CASE
WHEN 1=1 THEN 123
ELSE 'NAN'
END AS ddd,
CASE
WHEN 1=0 THEN 123
ELSE 'NAN'
END AS eee
執行的結果如下圖所示~
每一個數值之間,其前面都會被強制加了一個「3」?!
有哪位大神知道這是為什麼嗎???
因為你的SQL寫法有問題
輸出的數值並不是數字,而是HEX值
去查ASCII table就能發現:
HEX | 字串 |
---|---|
31 | 1 |
32 | 2 |
33 | 3 |
41 | A |
4e | N |
所以123會顯示成313233、NAN顯示成4e414e
正確的寫法應該是要讓輸出的型別一致,才不會發生型別自動轉換與預期不同的問題
SELECT
CASE
WHEN 1=1 THEN '1'
ELSE 'NAN'
END AS aaa,
CASE
WHEN 1=1 THEN '2'
ELSE 'NAN'
END AS bbb,
CASE
WHEN 1=1 THEN '3'
ELSE 'NAN'
END AS ccc,
CASE
WHEN 1=1 THEN '123'
ELSE 'NAN'
END AS ddd,
CASE
WHEN 1=0 THEN '123'
ELSE 'NAN'
END AS eee
另外,你寫NAN應該是指js中的NaN(Not a Number)
很遺憾,SQL中並沒有NaN
所以要嘛就一律輸出字串,不然就是NaN時回傳一個絕對不會出現在其他選項的數值(ex. 0、-1之類的)
then後面,一個是數字格式,一個是文字,有點奇怪
這個問題是要證明MYSQL容錯力很強哦?