是否有任何选项可以在 Snowlake 中将数字存储为具有特定格式的文本(逗号作为千位分隔符,句点作为小数点分隔符)?
Is there any option to store a number as text with a specific format (comma as thousands separator and period as decimal separator) in Snowlake?
由于项目要求,我需要将数字存储为文本,因为根据列的不同,我将其四舍五入到一些小数位或其他位,并且用特定格式:逗号作为千位分隔符,句点作为小数点分隔符。
例如,如果我必须四舍五入到两位数并且我有这个 12500.987589,我需要再得到这个 12,500.98。
我在 Snowflake 中找到的唯一解决方案与此类似:
SELECT
TO_VARCHAR(TO_NUMBER(TO_VARCHAR(ROUND(12500.987589 ,2)),'9,999,999.99',38,2))
FROM DUAL;
您知道执行此操作的任何选项吗?
非常感谢和问候,
数字应存储为数字数据类型。 数字的格式化是应用层的事情。将它们存储为文本可能会导致隐式转换、算术运算等问题
如果那是不可能的,你可以:
在 table 之上创建一个视图,提供带格式化字符串的附加列
创建视图v_tab
作为
SELECT *, ... 作为 number_formatted
来自选项卡;
创建一个计算列:
更改 TABLE 选项卡
添加列 number_formatted VARCHAR(100) AS (...);
要获得所需格式的表达式:
SELECT TO_VARCHAR(TO_NUMBER(ROUND(12500.987589,2),38,2),'9,999,999.99')
为什么你需要使用 round
功能?你应该可以使用
select to_varchar(12500.987589, '9,999,999.99')
这会产生:12,500.99
由于项目要求,我需要将数字存储为文本,因为根据列的不同,我将其四舍五入到一些小数位或其他位,并且用特定格式:逗号作为千位分隔符,句点作为小数点分隔符。
例如,如果我必须四舍五入到两位数并且我有这个 12500.987589,我需要再得到这个 12,500.98。
我在 Snowflake 中找到的唯一解决方案与此类似:
SELECT
TO_VARCHAR(TO_NUMBER(TO_VARCHAR(ROUND(12500.987589 ,2)),'9,999,999.99',38,2))
FROM DUAL;
您知道执行此操作的任何选项吗?
非常感谢和问候,
数字应存储为数字数据类型。 数字的格式化是应用层的事情。将它们存储为文本可能会导致隐式转换、算术运算等问题
如果那是不可能的,你可以:
在 table 之上创建一个视图,提供带格式化字符串的附加列
创建视图v_tab 作为 SELECT *, ... 作为 number_formatted 来自选项卡;
创建一个计算列:
更改 TABLE 选项卡 添加列 number_formatted VARCHAR(100) AS (...);
要获得所需格式的表达式:
SELECT TO_VARCHAR(TO_NUMBER(ROUND(12500.987589,2),38,2),'9,999,999.99')
为什么你需要使用 round
功能?你应该可以使用
select to_varchar(12500.987589, '9,999,999.99')
这会产生:12,500.99