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