跳到主要内容

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>'

参数说明

参数类型说明
exprSTRING要转换的字符串表达式
fmtSTRING格式模板字符串

示例

> 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真题

交流微信二维码

你可能还想看