SQL 日期函数

在数据库中,日期和时间是经常需要处理的数据类型之一。SQL提供了许多内置的日期函数,用于对日期和时间进行操作、计算和比较。这些函数可以帮助我们提取日期的各个部分(如年份、月份、日、小时、分钟等),执行日期的转换和格式化,以及计算日期之间的差值。 

目录

获取当前时间

CURRENT_TIMESTAMP() / NOW()

 CURRENT_DATE() /  CURDATE()

 CURRENT_TIME() / CURTIME()

提取时间

DATE()

 TIME()

提取各部分时间的函数 

EXTRACT() 

格式化日期

DATE_FORMAT()

增/减时间

DATE_ADD() / DATE_SUB()

ADDTIME() / SUBTIME()

TIMESTAMPADD()

计算日期差

DATEDIFF()

TIMESTAMPDIFF()



获取当前时间

可以使用 NOW() 、 CURDATE()、CURTIME() 获取当前时间或 CURRENT_TIMESTAMP()、CURRENT_DATE()、CURRENT_TIME() ,这两组函数在对应功能上相同,但在具体应用和某些特性上存在一定差异。

CURRENT_TIMESTAMP() / NOW()

返回当前日期和时间。格式:YYYY-MM-DD hh:mm:ss

mysql> SELECT NOW() AS `current_datetime`;
+-------------------------+
| current_datetime        |
+-------------------------+
| 2025-03-31 15:31:49.091 |
+-------------------------+

 CURRENT_DATE() /  CURDATE()

返回日期,不包括时间。格式:YYYY-MM-DD

mysql> SELECT CURDATE() AS `current_date`;
+--------------+
| current_date |
+--------------+
| 2025-03-25   | 
+--------------+

 CURRENT_TIME() / CURTIME()

返回当前时间,不包括日期。格式:hh:mm:ss

mysql> SELECT CURTIME() AS `current_time`;
+--------------+
| current_time |
+--------------+
| 16:16:30     |
+--------------+

在使用 NOW() 和 CURTIME() 时,如果要精确的秒以后的时间的话,可以在()中加数字,加多少,就表示精确到秒后多少位

比如 NOW(3) 就是精确到毫秒,表示为: 2025-03-31 15:27:20.645


提取时间

DATE()

返回日期/时间值的日期部分。

示例:

mysql> SELECT DATE('2025-11-14 16:48:23') AS `date`;
+------------+
| date       |
+------------+
| 2025-11-14 |
+------------+

 TIME()

返回日期/时间值的时间部分。

示例:

mysql> SELECT TIME('2025-11-14 16:48:23') AS `time`;
+----------+
| time     |
+----------+
| 16:48:23 |
+----------+

提取各部分时间的函数 

函数 作用
YEAR() 返回一个日期/时间值的年份
MONTH() 返回一个日期/时间值的月份
DAY() 返回一个日期/时间值的日
HOUR() 返回一个日期/时间值的小时
MINUTE() 返回一个日期/时间值的分钟
SECOND() 返回一个日期/时间值的秒数

示例:

mysql> SELECT YEAR('2025-11-14 16:48:23') AS `year`;
+------+
| year |
+------+
| 2025 |
+------+

EXTRACT() 

EXTRACT() 函数用于返回日期/时间的单独部分,如 YEAR (年)、MONTH (月)、DAY (日)、HOUR (小时)、MINUTE (分钟)、 SECOND (秒)。

语法

EXTRACT(unit FROM date)

其中:

  • table 是表格名
  • date 参数是合法的日期表达式。
  • unit 参数是需要返回的时间部分,如 YEAR 、MONTH 、 DAY 、 HOUR 、MINUTE 、SECOND 等。

示例: 

mysql> SELECT EXTRACT(MONTH FROM '2025-11-14 16:45:41') AS `month`;
+-------+
| month |
+-------+
| 11    |
+-------+

在一般情况下,EXTRACT(unit FROM date) 与 unit() 的结果相同。


格式化日期

DATE_FORMAT()

该函数用于将日期或时间值按照指定的格式进行格式化。

语法

DATE_FORMAT(date,format);

其中:

  • date 是要格式化的日期或时间值。
  • format 是指定的格式字符串。

格式字符串:

年份
%Y 表示四位数的年份。
%y 表示两位数的年份,如2023为23。
月份
%M 表示英文形式的月份,如11月为November。
%m 表示数字形式的月份。
日期
%D 表示英文形式的日期,如1st、14th等。
%d 表示数字形式的日期。
小时
%H 表示24小时制的小时。
%h / %I 表示12小时制的小时,如16为04。
分钟
%i 表示分钟。
秒钟
%S / %s 表示秒数。(MySQL里%S / %s是具有相同含义的)
星期
%W 表示星期的英文全称,如星期二为Tuesday。
%w 表示星期的数字形式,如星期日为0,星期一为1,以此类推。
%a 表示星期的英文缩写,如星期二为Tue。

示例:

mysql> SELECT DATE_FORMAT('2025-11-14 19:23:13', '%Y %m') AS `date_format`
+-------------+
| date_format |
+-------------+
| 2025 11     |
+-------------+

增/减时间

DATE_ADD() / DATE_SUB()

DATE_ADD用于向日期或时间添加指定的时间间隔,DATE_SUB用于从日期或时间减去指定的时间间隔。

语法

DATE_ADD/DATE_SUB(date, INTERVAL value unit)

其中,

  • date是要操作的日期或时间;
  • value是要添加(减去)的时间值;
  • unit是时间单位,可以是DAY、MONTH、YEAR等,也可以是HOUR、MINUTE、SECOND等。

示例:

向日期添加1天

mysql> SELECT DATE_ADD('2025-11-14 19:33:13', INTERVAL 1 DAY) AS `date_add`
+---------------------+
| date_add            |
+---------------------+
| 2025-11-15 19:33:13 |
+---------------------+

ADDDATE()与DATE_ADD()功能相同,SUBDATE()与DATE_SUB()功能相同,但它们在某些数据库中可能不支持。


ADDTIME() / SUBTIME()

ADDTIME()用于向时间添加指定的时间间隔,SUBTIME()用于从时间减去指定的时间间隔。

语法

ADDTIME/SUBTIME(time, 'value unit')

 其中,

  • time是要操作的时间;
  • value是要添加(减去)的时间值;
  • unit是时间单位,可以是HOUR、MINUTE、SECOND等。

示例:

mysql> SELECT DATE_ADD('2025-11-14 19:33:13', '1 hour') AS `subtime`
+---------------------+
| subtime             |
+---------------------+
| 2025-11-14 18:33:13 |
+---------------------+

TIMESTAMPADD()

用于向时间戳添加指定的时间间隔。

语法

TIMESTAMPADD(unit, value, timestamp)

其中, 

  • unit:表示要添加的时间单位,如 DAY、MONTH、YEAR 等。
  • value:表示要添加的时间值,可以是整数或小数。
  • timestamp:表示要操作的时间戳。

示例: 

向日期减去3天

mysql> SELECT TIMESTAMPDAA('2025-11-14 19:33:13', DAY, -3) AS `timestampadd`
+---------------------+
| timestampadd        |
+---------------------+
| 2025-11-11 18:33:13 |
+---------------------+

计算日期差

DATEDIFF()

计算两个日期之间的天数差。

语法

DATEDIFF(end_date, start_date)

其中, 

  • start_date:表示起始日期。
  • end_date:表示结束日期。

TIMESTAMPDIFF()

计算两个日期或时间戳之间的差值。

TIMESTAMPDIFF(unit, start_time, end_time)

其中,

  • unit是时间单位,可以是DAY、MONTH、YEAR等;
  • start_date:表示起始日期。
  • end_date:表示结束日期。

示例:

mysql> SELECT TIMESTAMPDIFF(MONTH, '2025-08-14', '2025-11-14') AS `timestampdiff`
+---------------+
| timestampdiff |
+---------------+
| 3             |
+---------------+
 # 结束日小于起始日时
-> SELECT TIMESTAMPDIFF(MONTH, '2025-08-15', '2025-11-14') AS `timestampdiff`
+---------------+
| timestampdiff |
+---------------+
| 2             |
+---------------+

你可能感兴趣的:(SQL,sql,数据库)