Snowflake中to_numeric函数默认格式是什么?如何复现其默认行为?
如何用显式FORMAT参数复现Snowflake TO_NUMERIC的默认行为
要复现TO_NUMERIC的默认解析逻辑,你需要用能匹配通用数值格式的格式模型——默认行为是宽松的,会自动忽略输入中的前后空格,识别正负号、千分位分隔符(逗号)和小数点(句点),这和文档里提到的TM9/TME不一样,因为TM9是严格格式,不允许千分位这类分隔符,用它会导致带分隔符的输入报错。
具体来说,你可以用包含以下元素的格式模型:
S:匹配正负号(可选,放在开头)G:匹配千分位分隔符(对应输入里的逗号)D:匹配小数点(对应输入里的句点)FM:去掉格式解析时的前导空格,同时忽略输入里的前后空格9:匹配任意数字位(根据你需要处理的数值长度调整数量)
举几个实际例子:
- 处理带千分位和小数点的数值:
SELECT TO_NUMERIC('1,234.56', 'FM S9G999D99'); -- 返回1234.56
- 处理带负号的整数:
SELECT TO_NUMERIC('-789', 'FM S999'); -- 返回-789
- 处理带前后空格的数值:
SELECT TO_NUMERIC(' 100 ', 'FM999'); -- 返回100
如果需要兼容更长的数值,只需增加9的数量即可,比如'FM S999G999G999G999D999999'就能处理更大范围的数值。
内容的提问来源于stack exchange,提问作者nsenno
相关产品推荐
相关产品推荐

