为何CAST函数在CASE语句中执行失败?SQL语法问题求助
CASE语句中CAST函数语法错误的原因与解决办法
错误根源
你的CAST函数写法不符合SQL语法规范。SQL里CAST的正确格式是CAST(要转换的表达式 AS 目标数据类型),但你写成了cast height as DECIMAL(4,2)——少了包裹height的括号,数据库无法识别这个语法,所以抛出了“near "height": syntax error”的报错。
修正后的代码
select patient_id, weight, height, case when weight/POWER((CAST(height AS DECIMAL(4,2))/100.0), 2) >= 30 then 1 else 0 end AS isObese from patients
为什么移除CAST后能正常运行
大部分SQL数据库都支持隐式类型转换:当整数类型的height和浮点数100.0进行除法运算时,数据库会自动把height转换成浮点数来计算,不需要手动写CAST也能得到正确的小数结果,所以代码可以正常执行。
如果对计算精度有明确要求,显式使用CAST能让逻辑更清晰,避免隐式转换可能带来的精度丢失问题;如果只是普通计算,隐式转换也能满足需求。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

