to_number:字符串转数字
速查结论
to_number(expr, fmt) 是 Spark SQL 中用于根据格式模板将字符串转换为数字的函数。
语法
to_number(expr, fmt)
根据字符串格式fmt将字符串expr转换为数字。如果转换失败,则抛出异常。格式可以由以下字符组成,不区分大小写:
'0'或'9':指定0到9之间的预期数字。格式字符串中的0或9序列与输入字符串中的数字序列相匹配。如果0/9序列以0开头并且在小数点之前,它只能匹配相同大小的数字序列。否则,如果序列以9开头或在小数点之后,它可以匹配相同大小或更小的数字序列。'.'或'D':指定小数点的位置(可选,只允许出现一次)。','或'G':指定分组(千位)分隔符(,)的位置。每个分组分隔符的左右必须有0或9。expr必须与分组分隔符匹配,符合数字的大小。'$':指定货币符号$的位置。这个角色只能指定一次。'S'或'MI':指定'-'或'+'符号的位置(可选,只允许在格式字符串的开头或结尾出现一次)。注意'S'允许'-',但'MI'不允许。'PR':只允许在格式字符串的末尾;指定如果expr表示负数,则用尖括号括起来。例如'<1>'。
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| expr | STRING | 要转换的字符串表达式 |
| fmt | STRING | 格式模板字符串 |
示例
> SELECT to_number('454', '999');
454
> SELECT to_number('454.00', '000D00');
454.00
> SELECT to_number('12,454', '99G999');
12454
> SELECT to_number('$78.12', '$99.99');
78.12
> SELECT to_number('12,454.8-', '99G999D9S');
-12454.8
常见报错与避坑指南
- 字符串与格式模板不匹配:
expr必须严格匹配fmt定义的格式,包括分隔符位置、数字位数等,否则抛出异常。 '0'与'9'的匹配差异:'0'要求严格匹配相同位数的数字,而'9'在小数点后允许匹配更少的数字。选择合适的占位符可避免解析失败。
Since: 3.3.0
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

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