跳到主要内容

try_subtract:安全减法运算

速查结论

try_subtract(expr1, expr2) 是 Spark SQL 中用于返回两数之差,溢出时返回 NULL 而非报错的数学函数。

语法

try_subtract(expr1, expr2)

参数说明

参数说明
expr1被减数,可接受的输入类型与 - 运算符相同
expr2减数,可接受的输入类型与 - 运算符相同

功能说明

try_subtract(expr1, expr2) 返回 expr1 减去 expr2 的结果,如果发生溢出则结果为 NULL。可接受的输入类型与 - 运算符相同,支持数值、日期、时间戳和间隔类型。

示例

> SELECT try_subtract(2, 1);
1
> SELECT try_subtract(-2147483648, 1);
NULL
> SELECT try_subtract(date'2021-01-02', 1);
2021-01-01
> SELECT try_subtract(date'2021-01-01', interval 1 year);
2020-01-01
> SELECT try_subtract(timestamp'2021-01-02 00:00:00', interval 1 day);
2021-01-01 00:00:00
> SELECT try_subtract(interval 2 year, interval 1 year);
1-0

常见报错与避坑指南

  • 整数溢出返回 NULL:当减法结果超出数据类型范围时返回 NULL。例如 -2147483648 - 1 超出 INT 最小值,try_subtract 返回 NULL。
  • 日期运算try_subtract 支持日期减整数、日期减间隔、时间戳减间隔等操作,返回对应的日期或时间戳类型。
  • 与 - 运算符的区别:仅在溢出行为上有差异。普通运算用 - 即可;处理边界数值时优先使用 try_subtract

Since: 3.3.0

📱关注公众号

「数据仓库技术」文章同步更新,不错过每一篇干货

微信公众号二维码
💬加群交流

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

交流微信二维码

你可能还想看