try_to_number:安全数字格式转换
速查结论
try_to_number(expr, fmt) 是 Spark SQL 中用于按格式模板将字符串转换为数字,不匹配时返回 NULL 而非报错的字符串函数。
语法
try_to_number(expr, fmt)
参数说明
| 参数 | 说明 |
|---|---|
expr | 需要转换为数字的字符串表达式 |
fmt | 指定字符串格式模板,与 to_number 函数语法相同 |
功能说明
try_to_number(expr, fmt) 根据字符串格式 fmt 将字符串 expr 转换为数字。如果字符串 expr 与预期格式不匹配,则返回 NULL。该格式遵循与 to_number 函数相同的语义。
示例
> SELECT try_to_number('454', '999');
454
> SELECT try_to_number('454.00', '000.00');
454.00
> SELECT try_to_number('12,454', '99,999');
12454
> SELECT try_to_number('$78.12', '$99.99');
78.12
> SELECT try_to_number('12,454.8-', '99,999.9S');
-12454.8
常见报错与避坑指南
- 格式不匹配返回 NULL:当输入字符串与格式模板不匹配时,
try_to_number返回 NULL。确保格式模板精确描述了输入字符串的结构(包括小数点、千位分隔符、货币符号等)。 - 负数符号处理:使用格式元素
S表示可选的符号位,MI或PR表示负数格式。 - 与 to_number 的区别:
to_number在格式不匹配时会抛出异常;try_to_number则优雅地返回 NULL。处理不规整的输入数据时优先使用try_to_number。
Since: 3.3.0
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

💬加群交流
备注「数据仓库技术」加入社群,每日一道大厂SQL真题
