Firebird中如何将0转为float类型?CAST(0 AS float)返回Single报错
解决Firebird中CAST(0 AS float)返回Single类型的问题
这个问题其实是Firebird对FLOAT类型的别名处理和字面量类型推导导致的——在Firebird里,FLOAT本质是DOUBLE PRECISION(双精度浮点数)的别名,但直接用CAST(0 AS FLOAT)时,整数字面量0会被优先推导为单精度的SINGLE类型,和你表中定义的FLOAT(双精度)不匹配,所以才会抛出那个类型错误。
你可以用以下几种方法来正确将0转换为双精度的FLOAT类型:
明确指定
DOUBLE PRECISION类型:因为FLOAT是它的别名,直接使用原名转换更准确:SELECT CAST(0 AS DOUBLE PRECISION) AS F1 FROM X使用带小数的字面量:带小数的数值字面量在Firebird中默认是双精度类型,所以转换时会匹配目标
FLOAT类型:SELECT CAST(0.0 AS FLOAT) AS F1 FROM X指定
FLOAT的精度参数:Firebird中FLOAT(n)当n >= 25时会被视为双精度,所以可以显式指定精度:SELECT CAST(0 AS FLOAT(53)) AS F1 FROM X
这三种方法都能让转换后的结果类型和你表中F1字段的FLOAT(双精度)类型保持一致,解决类型不匹配的错误。
内容的提问来源于stack exchange,提问作者user2531567
相关产品推荐
相关产品推荐

