MariaDB 函数

MariaDB DATE_SUB() 函数从日期/日期时间值中减去指定的时间/日期间隔,然后返回修改后的日期/日期时间值。

使用此函数并以负值作为参数相当于使用 DATE_ADD() 函数。

语法

DATE_SUB(datetime, INTERVAL value unit) 

参数

datetime必需。 指定要修改的日期或日期时间值。
value必填。 指定要减去的时间/日期间隔的值。允许正值和负值。
unit必填。 指定要减去的间隔的单位类型。它可以是以下值之一:
  • MICROSECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • MONTH
  • QUARTER
  • YEAR
  • SECOND_MICROSECOND
  • MINUTE_MICROSECOND
  • MINUTE_SECOND
  • HOUR_MICROSECOND
  • HOUR_SECOND
  • HOUR_MINUTE
  • DAY_MICROSECOND
  • DAY_SECOND
  • DAY_MINUTE
  • DAY_HOUR
  • YEAR_MONTH

返回值

返回修改后的日期/日期时间值。

示例 1:

下面的示例显示了DATE_SUB()函数的用法。

SELECT DATE_SUB('2019-10-25', INTERVAL 10 DAY);
Result: '2019-10-15'

SELECT DATE_SUB('2019-10-25 08:10:25', INTERVAL 2 HOUR);
Result: '2019-10-25 06:10:25'

SELECT DATE_SUB('2019-10-25 08:10:25', INTERVAL -2 HOUR);
Result: '2019-10-25 10:10:25'

SELECT DATE_SUB('2019-10-25 08:10:25', INTERVAL 30 MINUTE);
Result: '2019-10-25 07:40:25'

SELECT DATE_SUB('2019-10-25 08:10:25', INTERVAL -10 SECOND);
Result: '2019-10-25 08:10:35'

SELECT DATE_SUB('2019-10-25 08:10:25', INTERVAL 1 WEEK);
Result: '2019-10-18 08:10:25'

SELECT DATE_SUB('2019-10-25', INTERVAL -2 MONTH);
Result: '2019-12-25'

SELECT DATE_SUB('2019-10-25', INTERVAL 2 QUARTER);
Result: '2019-04-25'

SELECT DATE_SUB('2019-10-25', INTERVAL 2 YEAR);
Result: '2017-10-25'

SELECT DATE_SUB('2019-10-25 08:10:25', INTERVAL 10 MICROSECOND);
Result: '2019-10-25 08:10:24.999990'

SELECT DATE_SUB('2019-10-25 08:10:25', INTERVAL '5.0000010' SECOND_MICROSECOND);
Result: '2019-10-25 08:10:19.999990'

SELECT DATE_SUB('2019-10-25 08:10:25', INTERVAL '10:5.0000010' MINUTE_MICROSECOND);
Result: '2019-10-25 08:00:19.999990'

SELECT DATE_SUB('2019-10-25 08:10:25', INTERVAL '10:5' MINUTE_SECOND);
Result: '2019-10-25 08:00:20'

SELECT DATE_SUB('2019-10-25 08:10:25', INTERVAL '2:10:5.0000010' HOUR_MICROSECOND);
Result: '2019-10-25 06:00:19.999990'

SELECT DATE_SUB('2019-10-25 08:10:25', INTERVAL '2:10:5' HOUR_SECOND);
Result: '2019-10-25 06:00:20'

SELECT DATE_SUB('2019-10-25 08:10:25', INTERVAL '2:10' HOUR_MINUTE);
Result: '2019-10-25 06:00:25'

SELECT DATE_SUB('2019-10-25 08:10:25', INTERVAL '3 2:10:5.0000010' DAY_MICROSECOND);
Result: '2019-10-22 06:00:19.999990'

SELECT DATE_SUB('2019-10-25 08:10:25', INTERVAL '3 2:10:5' DAY_SECOND);
Result: '2019-10-22 06:00:20'

SELECT DATE_SUB('2019-10-25 08:10:25', INTERVAL '3 2:10' DAY_MINUTE);
Result: '2019-10-22 06:00:25'

SELECT DATE_SUB('2019-10-25 08:10:25', INTERVAL '3 2' DAY_HOUR);
Result: '2019-10-22 06:10:25'

SELECT DATE_SUB('2019-10-25 08:10:25', INTERVAL '2 5' YEAR_MONTH);
Result: '2017-05-25 08:10:25' 

示例 2:

考虑一个名为 EmployeeLogin 的数据库表,其中包含以下记录:

EmpIDNameLogin StampExpected Logout Stamp
1John2019-10-25 09:20:382019-10-25 17:50:38
2Marry2019-10-25 09:21:052019-10-25 17:51:05
3Jo2019-10-25 09:24:352019-10-25 17:54:35
4Kim2019-10-25 09:25:242019-10-25 17:55:24
5Ramesh2019-10-25 09:27:162019-10-25 17:57:16

插入新记录在此表中记录,可以使用以下语句。

INSERT INTO EmployeeLogin 
VALUES (6, 'Suresh', NOW(), DATE_SUB(NOW(), INTERVAL '-8:30' HOUR_MINUTE));

-- 查看结果
SELECT * FROM EmployeeLogin; 

这将产生类似于以下内容的结果:

EmpIDNameLogin StampExpected Logout Stamp
1John2019-10-25 09:20:382019-10-25 17:50:38
2Marry2019-10-25 09:21:052019-10-25 17:51:05
3Jo2019-10-25 09:24:352019-10-25 17:54:35
4Kim2019-10-25 09:25:242019-10-25 17:55:24
5Ramesh2019-10-25 09:27:162019-10-25 17:57:16
6Suresh2019-10-25 09:28:192019-10-25 17:58:19