[英]MySQL CASE WHEN mixing [compare_value] and [condition] doesn't work conditions in WHEN blocks
有人可以解釋為什么這不能按預期進行。 以及如何在MySQL數據庫上正確實現此邏輯? 下面的例子:
create table test( effort text );
insert into test values('0.1');
insert into test values('0.25');
insert into test values('1.5');
insert into test values('5');
insert into test values('10');
SQL
select effort, CASE effort
WHEN 0.1 THEN 5
WHEN 0.25 THEN 4
WHEN (CAST(effort AS DECIMAL(5,2)) < 3) THEN 3
WHEN (CAST(effort AS DECIMAL(5,2)) between 3.0 AND 8.0) THEN 2
WHEN (CAST(effort AS DECIMAL(5,2)) > 8) THEN 1
END as 'ISE' from test
結果:
您不能混合使用兩種類型的case
語句-簡單語句和搜索語句。 因此,為每個條件設置條件:
select effort,
(CASE WHEN effort = '0.1' THEN 5
WHEN effort = '0.25' THEN 4
WHEN CAST(effort AS DECIMAL(5,2)) < 3 THEN 3
WHEN CAST(effort AS DECIMAL(5,2)) between 3.0 AND 8.0) THEN 2
WHEN CAST(effort AS DECIMAL(5,2)) > 8 THEN 1
END) as ISE
from test;
您會注意到,我為字符串比較切換了相等類型。 您將effort
存儲為字符串,因此比較應為字符串或使用顯式比較。
相反,我建議您將值存儲為DECIMAL(5, 2)
而不是字符串。 然后,該case
將寫為:
select effort,
(CASE WHEN effort = 0.1 THEN 5
WHEN effort = 0.25 THEN 4
WHEN effort < 3 THEN 3
WHEN effort between 3.0 AND 8.0) THEN 2
WHEN effort > 8 THEN 1
END) as ISE
from test;
我認為沒有必要將值存儲為字符串(如果打算將其用作數字)。
select effort,
CASE WHEN effort = '0.1' THEN 5
WHEN effort = '0.25' THEN 4
WHEN CAST(effort AS DECIMAL(5,2)) < 3 THEN 3
WHEN CAST(effort AS DECIMAL(5,2)) between 3.0 AND 8.0) THEN 2
WHEN CAST(effort AS DECIMAL(5,2)) > 8 THEN 1
END as ISE
from test;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.