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

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

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

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

- 描述: 从日期或日期时间表达式中提取日期部分。
- 用法: 从日期时间字段中分离并显示日期部分。
SELECTDATE('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(YEARFROM'2024-07-25')ASyear; - 提取月份
SELECT EXTRACT(MONTHFROM'2024-07-25')ASmonth; - 提取日
SELECT EXTRACT(DAYFROM'2024-07-25')ASday; - 提取小时
SELECT EXTRACT(HOURFROM'2024-07-25 12:30:45')AShour; - 提取分钟
SELECT EXTRACT(MINUTEFROM'2024-07-25 12:30:45')ASminute; - 提取秒
SELECT EXTRACT(SECONDFROM'2024-07-25 12:30:45')ASsecond;
6. DAY( )
- 描述: 从给定日期中提取天数部分。

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

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

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

- 用法示例:
SELECT DATE_ADD(NOW(),INTERVAL1MONTH);这将返回当前日期加上一个月后的日期。
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',INTERVAL100 MICROSECOND)AS new_date; - 添加分钟
SELECT DATE_ADD('2024-07-25',INTERVAL15MINUTE)AS new_date; - 添加周
SELECT DATE_ADD('2024-07-25',INTERVAL2 WEEK)AS new_date; - 添加季度
SELECT DATE_ADD('2024-07-25',INTERVAL1 QUARTER)AS new_date; - 添加年
SELECT DATE_ADD('2024-07-25',INTERVAL5YEAR)AS new_date;
下面的sub同理。
10. DATE_SUB( )
- 描述: 在给定的日期上减去指定的时间间隔。

- 用法示例:
SELECT DATE_SUB(NOW(),INTERVAL1 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_orderFROM 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
版权归原作者 喻师傅 所有, 如有侵权,请联系我们删除。