如何通过SQL SELECT为新列指定带两位小数的浮点型数据类型
解决方法:将格式化后的字符串转为数值类型
问题的核心在于FORMAT()函数的返回值类型是文本(text/varchar),所以你需要显式地把它转换为数值类型,或者换一种更直接的方式计算并保留小数精度,同时保持数值类型。
这里提供两种实用的方案:
方案一:优先使用ROUND+CAST(推荐,适合财务数据)
对于需要精确保留两位小数的财务场景,DECIMAL/NUMERIC是比FLOAT更合适的类型(FLOAT是近似数值类型,可能存在精度误差)。我们可以先通过ROUND()函数将计算结果四舍五入到两位小数,再用CAST()指定精确的数值类型:
SELECT CAST(ROUND(("fcf" / "fxusd") / 1000000, 2) AS DECIMAL(10, 2)) AS "Free Cashflow (USD mm)" FROM "SF1";
ROUND(计算式, 2):把(fcf/fxusd)/1000000的结果四舍五入到两位小数CAST(...) AS DECIMAL(10,2):将结果转换为总长度10位、小数位2位的精确数值类型,同时保证数据类型是数值型而非文本
方案二:如果一定要用FORMAT,再转数值类型
如果你坚持要使用FORMAT()函数,也可以把它返回的文本结果重新转换为数值类型:
SELECT CAST(FORMAT(("fcf" / "fxusd") / 1000000, 2) AS DECIMAL(10, 2)) AS "Free Cashflow (USD mm)" FROM "SF1";
不过这种方式多了一层字符串转数值的步骤,效率略低于方案一,所以更推荐方案一。
额外提醒
如果确实需要FLOAT类型,只需要把DECIMAL(10,2)替换成FLOAT即可,但还是建议财务类数据优先用DECIMAL,避免近似数值带来的精度问题。
内容的提问来源于stack exchange,提问作者F.Marks
相关产品推荐
相关产品推荐

