-
如果
expr1
是数值,则
expr2
必须是数值表达式
-
如果
expr1
是年份或日期时间间隔,则
expr2
必须是匹配的时间间隔类。
-
否则,
expr2
必须为 DATE 或 TIMESTAMP。
结果类型按以下顺序确定:
-
如果
expr1
是数值,则结果为参数的公共最大值类型。
-
如果
expr1
是 DATE,而
expr2
是日期时间间隔,则结果为 TIMESTAMP。
-
如果
expr1
是 TIMESTAMP,而
expr2
是时间间隔,则结果为 TIMESTAMP。
-
如果
expr1
和
expr2
是 DATE,则结果为
INTERVAL DAYS
。
-
如果
expr1
和
expr2
是 TIMESTAMP,则结果为
INTERVAL DAY TO SECOND
。
-
如果
expr1
和
expr2
是年月时间间隔,则结果为用于表示结果的足够宽单位的年月时间间隔。
-
如果
expr1
和
expr2
是日期时间间隔,则结果为用于表示结果的足够宽单位的日期时间间隔。
-
否则,结果类型与
expr1
一致。
如果两个表达式均为时间间隔,则它们必须属于同一类。
在从 DATE 减去年月时间间隔时,Databricks SQL 会确保生成的日期格式正确。
如果结果溢出结果类型,则 Databricks SQL 会引发
ARITHMETIC_OVERFLOW
错误。
使用
try_subtract
在溢出时返回
NULL
。
在 Databricks Runtime 中,如果
spark.sql.ansi.enabled
为
false
,则溢出不会导致错误,而是会将结果“换行”。