YashanDB DATE_SUB 函数

DATE_SUB 函数用于执行日期运算,通过expr的值减去给定的区间值得到时间推进或后退过的结果。
expr
通用表达式,expr 的值须为 DATE、TIME、TIMESTAMP 类型,或可以转换为 DATE、TIMESTAMP 类型的字符类型。
当 expr 为字面量时,只能为 DATE 和 TIMESTAMP 关键字的输入字符串,不能为 TIME 关键字的输入字符串。例如,DATE '2012-10-12'、TIMESTAMP '2012-10-12 10:20:24.000006'为函数可接受的 expr 值,而当 expr 为 TIME '10:20:24'时函数则返回错误。
当 expr 为 NULL 时,函数返回 NULL。
interval_value
指定时间前进或后退的区间值,且必须为如下形式:
0 或正整数字面量, 例如 0、1、2 等。
包含 0 或正整数内容的字符串字面量, 例如'0'、'1'、'-2'等。
包含负整数内容的字符串字面量, 例如'-1'、'-2'等。
包含 INTERVAL 内容的字符串字面量, 例如'10-8'、'-8 8:10:24'等。
interval_unit
指定区间值的单位,该值不可为 NULL,且必须为如下形式:
MONTH、YEAR、YEAR TO MONTH 关键字(不区分大小写):此时 interval_value 被转换为 INTERVAL YEAR TO MONTH 类型。
SECOND、MINUTE、HOUR、DAY、MINUTE TO SECOND、HOUR TO SECOND、HOUR TO MINUTE、DAY TO SECOND、DAY TO MINUTE、DAY TO HOUR 关键字(不区分大小写):此时 interval_value 被转换为 INTERVAL DAY TO SECOND 类型。
interval_value 与 interval_unit 必须正确匹配,例如分别为 2/YEAR,3/HOUR,'10-8'/YEAR TO MONTH、'-8 8:10:24'/DAY TO SECOND,否则函数返回类型转换错误。
日期运算规则
当 interval_value 为 INTERVAL YEAR TO MONTH 类型时,运算规则为:
先进行 month 的增减,再判断 day 是否符合 month 的增减后的 day 数。
如果增减后的 month 的天数小于增减前的 month 的天数,那么增减后的 day 数等于增减后的 month 的最后一天。
当 expr 和 interval_value 的数据类型不相同时,函数先执行类型转换,若两个数据类型之间无法按照一定的规则进行转换,则返回类型转换错误。类型转换规则如下:
expr 为 DATE/TIME/TIMESTAMP 类型时,无需转换,函数直接返回 expr 的数据类型。
expr 为 CHAR/VARCHAR 类型时,函数将其转换为 DATE 类型,转换成功则返回转换后的数据类型,否则返回类型转换错误。
expr 为 TIME,interval_value 为 INTERVAL DAY TO SECOND 类型时,超过范围将翻转,即超过 24 小时求余数,例如计算后的小时为 25 时,将其翻转为 1。
expr 为 TIME,interval_value 为 INTERVAL YEAR TO MONTH 类型时,函数返回类型不支持错误。
示例
评论