YashanDB DATE_ADD函数

YashanDB DATE_ADD函数详解

DATE_ADD函数用于执行日期运算,通过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类型时,函数返回类型不支持错误。

示例

SELECT DATE_ADD('2012-10-12',INTERVAL  '-1' YEAR) res FROM DUAL;
RES                                                              
---------------------------------------------------------------- 
2011-10-12 00:00:00.000000  

-- interval_value为INTERVAL YEAR TO MONTH类型时
SELECT DATE_ADD('2012-10-31',INTERVAL 1 MONTH) res FROM DUAL;
RES                                                              
---------------------------------------------------------------- 
2012-11-30 00:00:00.000000  

-- interval_value为INTERVAL DAY TO SECOND类型时
SELECT DATE_ADD(CAST('10:20:24' AS TIME),INTERVAL '8:10:24' HOUR TO SECOND) res FROM DUAL;
RES                  
-------------------- 
18:30:48.000000 

-- 小时翻转
SELECT DATE_ADD(CAST('10:20:24' AS TIME),INTERVAL '14:10:24' HOUR TO SECOND) res FROM DUAL;
RES                  
-------------------- 
00:30:48.000000 
`DATE_ADD()` 是 MySQL 中的一个日期时间函数,用于对日期或时间值进行加减操作。它可以根据指定的时间间隔(如天、月、小时等)来调整日期或时间。以下是详细解释: ### 语法 ```sql DATE_ADD(date, INTERVAL value unit) ``` - `date`:需要操作的日期或时间,可以是一个具体的日期值,也可以是一个日期类型的列名。 - `value`:要添加或减去的数值,可以是正数(增加)或负数(减少)。 - `unit`:指定时间单位,常见的单位如下: - `SECOND`:秒 - `MINUTE`:分钟 - `HOUR`:小时 - `DAY`:天 - `MONTH`:月 - `YEAR`:年 - `WEEK`:周(7天为单位) - `QUARTER`:季度(3个月为单位) - `MICROSECOND`:微秒 [^3] ### 关键点 - `INTERVAL` 是 MySQL 关键字,表示一个时间间隔。单位和数值组合定义了如何调整 `date`。 - 如果需要减去时间,可以使用负数,或者用 `DATE_SUB()` 函数 [^3]。 ### 案例解释 #### 增加时间 ```sql SELECT DATE_ADD('2024-12-01', INTERVAL 10 DAY); -- 输出:2024-12-11 ``` #### 减少时间 使用负数或 `DATE_SUB()`: ```sql SELECT DATE_ADD('2024-12-01', INTERVAL -10 DAY); -- 或 SELECT DATE_SUB('2024-12-01', INTERVAL 10 DAY); -- 输出:2024-11-21 ``` #### 增加月份和年份 ```sql SELECT DATE_ADD('2024-12-01', INTERVAL 2 MONTH); -- 输出:2025-02-01 SELECT DATE_ADD('2024-12-01', INTERVAL 1 YEAR); -- 输出:2025-12-01 ``` #### 增加具体时间 ```sql SELECT DATE_ADD('2024-12-01 10:30:00', INTERVAL 2 HOUR); -- 输出:2024-12-01 12:30:00 ``` ### 其他使用场景 在当前日期时间上添加一个月: ```sql SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH) AS NextMonth; ``` 在订单日期上添加两周: ```sql SELECT DATE_ADD(OrderDate, INTERVAL 2 WEEK) AS NewDeliveryDate FROM Orders; ``` ### 注意事项 - MySQL 中的 `DATE_ADD()` 函数返回的是一个新的日期或日期时间值,原始的输入日期不会被修改。 - 参数 `value` 可以是一个整数值或者一个表达式,用于指定要添加或减去的时间数量 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值