5、MySql中日期函数
目录
5.1、now()&sysdate(),CURDATE(),CURTIME()获取时间
SELECT now(),curdate(),curtime();
-- now()显示当前时间的年月日时分秒
-- sysdate()动态获取当前日期时间
-- now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。
select now(),sysdate();
-- 2021-06-26 09:34:15
-- curdate() 显示当前时间的年月日
select curdate();
-- 2021-06-26
-- curtime() 显示当前时间的时分秒
select curtime();
-- 09:34:15
5.1.2、OrderDate 时间列
SQL 创建带有日期时间列(OrderDate)
自带时间列的表,自动生成时间
CREATE TABLE Orders(
-- 时间列,自动生成时间日期
OrderDate datetime NOT NULL DEFAULT NOW(),
)
5.2、date() /timestampdiff() 时间差
- DATE(date) 函数提取日期或日期/时间表达式的日期部分。
- month (date) 函数提取月份或表达式中的月份。
- YEAR(date) 函数提取年份或表达式中的年份。
-- DATE(date);
select date(now());
-- 2021-06-26 --> 26
-- month (date)
select month(now());
-- 2021-06-26 --》6
-- YEAR(date)
select month(now());
-- 2021-06-26 --》2021
-
TIMESTAMPDIFF(interval,time_start,time_end) 计算两个时间差函数
-- 两个时间相隔多少天 TIMESTAMPDIFF( DAY, '2017-12-01 12:15:12','2018-01-01 7:18:20') -- 两个时间相隔多少月 TIMESTAMPDIFF( MONTH, '2017-11-01 12:15:12','2018-01-01 12:15:12') -- 两个时间相隔多少年 (year -- 两个时间相隔多少星期 (week
5.3、extract()函数
- 用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。
-- EXTRACT(unit FROM date)
-- extract(unit from date)
unit | 参数 |
---|---|
second | 秒 |
minute | 分 |
HOUR | 时 |
DAY | 天 |
WEEK | 周 |
MONTH | 月 |
quarter | 季节 |
YEAR | 年 |
-- 语法格式
SELECT
Student.Sage,
EXTRACT( YEAR FROM Sage ) AS 年,
extract( QUARTER FROM Sage ) AS 季节,
extract( month from Sage ) as 月,
extract( WEEK FROM Sage ) AS 周,
extract( DAY FROM Sage ) AS 日,
extract( HOUR FROM Sage ) AS 时,
extract( MINUTE FROM Sage ) AS 分,
extract( second FROM Sage ) AS 秒
FROM
Student
where
SId=02;
5.4、date_add() & date_sub()函数
- DATE_ADD() 函数向日期添加指定的时间间隔。
- DATE_SUB() 函数从日期减去指定的时间间隔。
-- 语法格式
-- 添加指定时间间隔
date_add(date,INTERVAL expr type)
-- 减去指定时间间隔
DATE_SUB(date,INTERVAL expr type)
同上 extract()函数参数
SELECT
Sage,
-- Sage 年份加1年
date_add( Sage, INTERVAL 1 year ) AS Sage2,
-- Sage 月份加2月
DATE_ADD(Sage,INTERVAL 2 MONTH ) as month2,
-- Sage 天数加3天
DATE_ADD(Sage,INTERVAL 3 DAY ) as day2,
-- Sage 时加4小时
DATE_ADD(Sage,INTERVAL 4 hour ) as hour2,
-- Sage 分钟加10分钟
DATE_ADD(Sage,INTERVAL 10 minute ) as minute2,
-- Sage 加15秒
DATE_ADD(Sage,INTERVAL 15 second ) as second2
FROM
Student;
5.5、获取当月某天
-- 获取当前日期
select curdate();
-- 获取当月最后一天。
select last_day(curdate());
-- 获取本月第一天
select DATE_ADD(curdate(),interval -day(curdate())+1 day);
-- 获取下个月的第一天
select date_add(curdate()-day(curdate())+1,interval 1 month);
-- 获取当前月的天数
select DATEDIFF(date_add(curdate()-day(curdate())+1,interval 1 month ),DATE_ADD(curdate(),interval -day(curdate())+1 day)) from dual;
-- 获取上月第一天
select date_add(curdate()-day(curdate())+1,interval -1 month);
-- 获取上月最后一天;
select last_day(date_add(curdate()-day(curdate())+1,interval -1 month))
5.5、datediff() 函数
- DATEDIFF() 函数返回两个日期之间的天数。
-- 语法格式
datediff(date1,date2)
-- date1 和 date2 参数是合法的日期或日期/时间表达式。
-- 注释:只有值的日期部分参与计算。
-- 日期之间相距5天
SELECT DATEDIFF('2008-11-30','2008-11-25') AS DiffDate;
5.6、date_format() 函数
- DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。
- TIME_FORMAT(time,format) 时间格式化
-- 语法格式
DATE_FORMAT(date,format)
-- date 参数是合法的日期。format 规定日期/时间的输出格式。
格式 | 描述 |
---|---|
%a | 缩写星期名, 英文缩写 |
%b | 缩写月名,英文缩写 |
%c | 月,数值(01-12) |
%d | 月的天数,数值(00-31) |
%e | 月的天数,数值(0-31) |
%f | 微秒 |
%H | 小时(00-23) |
%h | 小时(01-12) |
%i | 分钟,数值(00-59) |
%k | 小时(0-23) |
%l | 小时(1-12) |
%M | 月名 |
%m | 月,数值(00-12) |
%p | AM 或 PM |
%r | 时间,12-小时(hh:mm:ss AM 或 PM) |
%s | 秒(00-59) |
%T | 时间, 24-小时(hh:mm:ss) |
%U | 周(00-53)星期日是一周的第一天 |
%u | 周(00-53)星期一是一周的第一天 |
%W | 星期名 |
%Y | 年份,4 位yyyy |
%y | 年份,2 位 yy |
-- 缩写英文月 月的天 年4位 小时12制 分钟数值 am/pm
select DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p') as '月日年时分am/pm';
-- 月数值 天数 年4位
select DATE_FORMAT(NOW(),'%m-%d-%Y') as '月日年';
-- 月天数数值 缩写英文月 年2位
select DATE_FORMAT(NOW(),'%d %b %y') as '日月年';
-- 日 月 年 时间 微秒
select DATE_FORMAT(NOW(),'%d %b %Y %T:%f') as '日月年时间微秒';