是否有任何选项可以在 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;

您知道执行此操作的任何选项吗?

非常感谢和问候,

数字应存储为数字数据类型。 数字的格式化是应用层的事情。将它们存储为文本可能会导致隐式转换、算术运算等问题

如果那是不可能的,你可以:

  1. 在 table 之上创建一个视图,提供带格式化字符串的附加列

    创建视图v_tab 作为 SELECT *, ... 作为 number_formatted 来自选项卡;

  2. 创建一个计算列:

    更改 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