SQL Date Functions | SQL Time Functions
在SQL中,日期和时间函数是用于处理日期和时间数据的重要工具。
SQL Date Functions | SQL Time Functions函数可以从日期时间数据中提取特定的部分、执行日期计算、格式化日期时间等操作。
 
| No. | Function | Description | 描述 | 
|---|---|---|---|
| 1 | NOW( ) | Displays the current date and time. | 显示当前日期和时间。 | 
| 2 | CURDATE( ) | Displays the current date. | 显示当前日期。 | 
| 3 | CURTIME( ) | Displays the current time. | 显示当前时间。 | 
| 4 | DATE( ) | Displays the date from the Date/DateTime expression. | 从日期/日期时间表达式中显示日期。 | 
| 5 | EXTRACT( ) | Displays selected part i.e. date/time. | 显示所选的日期/时间部分。 | 
| 6 | DAY( ) | Displays the day from the given date. | 显示给定日期的天数。 | 
| 7 | MONTH( ) | Displays the month from the given date. | 显示给定日期的月份。 | 
| 8 | YEAR( ) | Displays the year from the given date. | 显示给定日期的年份。 | 
| 9 | DATE_ADD( ) | Displays date after adding the given interval. | 显示添加给定间隔后的日期。 | 
| 10 | DATE_SUB( ) | Displays date after subtracting the given interval. | 显示减去给定间隔后的日期。 | 
| 11 | DATEDIFF( ) | Displays the interval between two dates. | 显示两个日期之间的间隔。 | 
| 12 | DATE_FORMAT( ) | Displays the date/time data in various formats available. | 以各种可用的格式显示日期/时间数据。 | 
1. NOW( )

- 描述: 返回当前日期和时间。
 - 用法: 在插入或更新记录时,有助于获取当前时间戳。
 
SELECT NOW();
-- 示例输出:2024-07-25 12:00:00
 
在 MySQL 中,NOW() 函数可以通过指定不同的参数来控制返回的时间精确度。
-  
NOW(0) - 精确到秒:
SELECT NOW(0); -  
NOW(1) - 精确到十分之一秒:
 -  
NOW(2) - 精确到百分之一秒:
 -  
NOW(3) - 精确到毫秒:
SELECT NOW(3); -  
NOW(4) - 精确到十分之一毫秒:
 -  
NOW(5) - 精确到百万分之一秒(微秒):
 -  
NOW(6) - 精确到千万分之一秒(微秒):
 
2. CURDATE( )

- 描述: 返回当前日期。
 - 用法: 用于获取当前日期,不包含时间部分。
 
SELECT CURDATE();
-- 示例输出:2024-07-25
 
3. CURTIME( )

- 描述: 返回当前时间。
 - 用法: 用于获取当前时间,不包含日期部分。
 
SELECT CURTIME();
-- 示例输出:12:00:00
 
4. DATE( )

- 描述: 从日期或日期时间表达式中提取日期部分。
 - 用法: 从日期时间字段中分离并显示日期部分。
 
SELECT DATE('2024-07-25 12:00:00');
-- 示例输出:2024-07-25
 
5. EXTRACT( )

- 描述: 从日期或时间中提取特定部分(如年份、月份、日期等)。
 - 用法: 从给定的日期或时间值中提取并返回指定的组件(年、月、日等)。
 
EXTRACT(unit FROM datetime_expression)
 
unit是要从日期时间表达式中提取的部分,可以是YEAR,MONTH,DAY,HOUR,MINUTE,SECOND等。datetime_expression是一个日期时间表达式,可以是一个日期、时间或日期时间值。
-  
提取年份
SELECT EXTRACT(YEAR FROM '2024-07-25') AS year; -  
提取月份
SELECT EXTRACT(MONTH FROM '2024-07-25') AS month; -  
提取日
SELECT EXTRACT(DAY FROM '2024-07-25') AS day; -  
提取小时
SELECT EXTRACT(HOUR FROM '2024-07-25 12:30:45') AS hour; -  
提取分钟
SELECT EXTRACT(MINUTE FROM '2024-07-25 12:30:45') AS minute; -  
提取秒
SELECT EXTRACT(SECOND FROM '2024-07-25 12:30:45') AS second; 
6. DAY( )
-  
描述: 从给定日期中提取天数部分。

 -  
用法示例:
SELECT DAY(NOW());结果可能是当前月份的某一天,例如
25。 
7. MONTH( )
- 描述: 从给定日期中提取月份部分。
 

- 用法示例:
结果可能是当前年份的某一月份,例如SELECT MONTH(NOW());7。 
8. YEAR( )
- 描述: 从给定日期中提取年份部分。
 

- 用法示例:
结果可能是当前年份的数字,例如SELECT YEAR(NOW());2024。 
9. DATE_ADD( )
-  
描述: 在给定的日期上添加指定的时间间隔。

 -  
用法示例:
SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH);这将返回当前日期加上一个月后的日期。
 
DATE_ADD() 函数中的 unit 参数指定了时间量的单位,用于指定要添加的时间间隔的类型
-  
MICROSECOND
- 微秒。示例:
INTERVAL 100 MICROSECOND 
 - 微秒。示例:
 -  
SECOND
- 秒。示例:
INTERVAL 30 SECOND 
 - 秒。示例:
 -  
MINUTE
- 分钟。示例:
INTERVAL 15 MINUTE 
 - 分钟。示例:
 -  
HOUR
- 小时。示例:
INTERVAL 2 HOUR 
 - 小时。示例:
 -  
DAY
- 天。示例:
INTERVAL 7 DAY 
 - 天。示例:
 -  
WEEK
- 周。示例:
INTERVAL 2 WEEK 
 - 周。示例:
 -  
MONTH
- 月。示例:
INTERVAL 3 MONTH 
 - 月。示例:
 -  
QUARTER
- 季度。示例:
INTERVAL 1 QUARTER 
 - 季度。示例:
 -  
YEAR
- 年。示例:
INTERVAL 5 YEAR 
 - 年。示例:
 
-  
添加微秒
SELECT DATE_ADD('2024-07-25', INTERVAL 100 MICROSECOND) AS new_date; -  
添加分钟
SELECT DATE_ADD('2024-07-25', INTERVAL 15 MINUTE) AS new_date; -  
添加周
SELECT DATE_ADD('2024-07-25', INTERVAL 2 WEEK) AS new_date; -  
添加季度
SELECT DATE_ADD('2024-07-25', INTERVAL 1 QUARTER) AS new_date; -  
添加年
SELECT DATE_ADD('2024-07-25', INTERVAL 5 YEAR) AS new_date; 
下面的sub同理。
10. DATE_SUB( )
- 描述: 在给定的日期上减去指定的时间间隔。
 

-  
用法示例:
SELECT DATE_SUB(NOW(), INTERVAL 1 WEEK);这将返回当前日期减去一周后的日期。
 
11. DATEDIFF( )
- 描述: 计算两个日期之间的天数差。
 

DATEDIFF 函数是用于计算两个日期之间的差异(间隔)的函数,返回的是整数值,表示两个日期之间的天数差。
DATEDIFF(date1, date2)
 
其中:
date1和date2是要比较的两个日期或日期时间表达式。
假设有一个表 orders,其中包含 order_date 记录订单的日期时间。
-  
计算天数差异
SELECT DATEDIFF('2024-07-25', '2024-07-20') AS day_difference;返回
5,表示从2024-07-20到2024-07-25之间相差了5天。 -  
结合表中的日期字段
SELECT order_id, order_date, DATEDIFF(CURRENT_DATE(), order_date) AS days_since_order FROM orders;计算每个订单的
order_date到当前日期 (CURRENT_DATE()) 的天数差。 
DATEDIFF()返回的是日期的绝对差值,如果date1在date2之后,则结果是正数;如果date1在date2之前,则结果是负数。
12. DATE_FORMAT( )
- 描述: 将日期/时间数据格式化为不同的字符串格式。

 
DATE_FORMAT(date, format)
 
其中:
date是要格式化的日期或日期时间表达式。format是用于指定输出格式的字符串。
常见的格式化选项,用于构建 format 字符串:
%Y: 四位数年份(例如:2024)%y: 两位数年份(例如:24)%m: 月份(01 到 12)%d: 月份中的天数(01 到 31)%H: 小时(00 到 23)%h: 小时(01 到 12)%i: 分钟(00 到 59)%s: 秒(00 到 59)%W: 星期全名(例如:Monday)%a: 星期缩写(例如:Mon)%M: 月份全名(例如:July)%b: 月份缩写(例如:Jul)%e: 月份中的天数(1 到 31,没有前导零)%T: 时间(24小时制,例如:13:45:30)%r: 时间(12小时制,例如:01:45:30 PM)
- 1: 格式化日期
 
假设有一个表 employees,其中包含 hire_date 字段记录雇佣日期。
SELECT hire_date, DATE_FORMAT(hire_date, '%Y-%m-%d') AS formatted_hire_date
FROM employees;
 
根据 %Y-%m-%d 格式化为类似 2024-07-25 的形式。
- 2: 显示月份和年份
 
SELECT hire_date, DATE_FORMAT(hire_date, '%M %Y') AS formatted_month_year
FROM employees;
 
hire_date 格式化为类似 July 2024 的形式。
- 3: 自定义日期格式
 
SELECT hire_date, DATE_FORMAT(hire_date, 'Joined on %W, %M %e, %Y') AS custom_format
FROM employees;
 
把 hire_date 格式化为类似 Joined on Monday, July 25, 2024 的形式。
- 4: 格式化时间
 
假设有一个 orders 表,其中包含 order_time 记录下单时间的字段。
SELECT order_time, DATE_FORMAT(order_time, '%H:%i:%s') AS formatted_time
FROM orders;
 
把 order_time 根据 %H:%i:%s 格式化为类似 12:30:45 的形式。
- 5: 使用AM/PM格式
 
SELECT order_time, DATE_FORMAT(order_time, '%h:%i %p') AS formatted_time_am_pm
FROM orders;
 
把 order_time 格式化为类似 12:30 PM 的形式。
- 6: 结合日期和时间格式化
 
SELECT order_datetime, DATE_FORMAT(order_datetime, '%Y-%m-%d %H:%i:%s') AS formatted_datetime
FROM orders;
 
把 order_datetime 格式化为类似 2024-07-25 12:30:45 的形式。
- 7: 获取月份和年份的缩写
 
SELECT hire_date, DATE_FORMAT(hire_date, '%b %Y') AS formatted_month_year_short
FROM employees;
 
Jul 2024



















