PAYATHON 2026

Snowflake 如何将数值格式化为百分比,类似 T-SQL 的 P?

数据小陈

可以。Snowflake 当前支持在 TO_CHAR 的数值格式中使用 %,自动将输入乘以 100 并输出百分号,无需手动拼接字符串。要显示两位或三位小数,分别使用 FM999999990.00% 和 FM999999990.000%。Snowflake 数值格式文档

如何实现示例中的格式?

将 T-SQL 的 FORMAT 调用替换为以下 Snowflake SQL:

SELECT
    s.c,
    TO_CHAR(s.c, 'FM999999990.00%') AS c_format_P,
    TO_CHAR(s.c, 'FM999999990.000%') AS c_format_P3
FROM (
    VALUES (1.2), (0.5), (0.25263), (0.10001), (0), (NULL)
) AS s(c);

示例数值按上述格式转换后的百分比文本如下:

cc_format_Pc_format_P3
1.2120.00%120.000%
0.550.00%50.000%
0.2526325.26%25.263%
0.1000110.00%10.001%
00.00%0.000%
NULLNULLNULL

这里的 NULL 表示 SQL 空值。输入为 NULL 时,TO_CHAR 返回 NULL。TO_VARCHAR 是 TO_CHAR 的同义函数,也可以使用相同写法。TO_CHAR / TO_VARCHAR 文档

格式字符串各部分有什么作用?

  • %:将数值乘以 100,并在指定位置输出百分号。
  • FM:移除格式产生的填充空格。
  • 999999990:为整数部分预留位置,并保留零值的整数位。
  • .00 或 .000:分别固定显示两位或三位小数,保留末尾的零。

这些都是 Snowflake 的格式元素。P、P3 是原示例中的 T-SQL 写法,迁移时需要改写。格式元素说明

使用时需要注意什么?

输入应是比例值,例如 0.5 表示 50%。使用 % 格式元素时,不要提前乘以 100,否则 0.5 会显示为 5000.00%。

固定格式的整数位数有限。如果乘以 100 后的整数部分超出预留宽度,输出会出现 #。这时应根据实际数据范围增加小数点前的 9。格式宽度与溢出规则

格式化结果是 VARCHAR,适合展示。后续计算、汇总和数值排序应继续使用原始数值列。返回类型说明

备注:内容仅供参考。