Could someone please explain why this doesn't work as expected. And how to implement properly this logic on MySQL database? Example below:
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;
我认为没有理由将该值存储为字符串,如果它是数字的话。
关于MySQL CASE WHEN 混合 [compare_value] 和 [condition] 在 WHEN block 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43397263/