mysql日期时间函数

来源:互联网 发布:手机淘宝如何评价 编辑:程序博客网 时间:2024/06/05 16:57
一.获取当前时间或日期
1.NOW()年月日时分秒
2.CURDATE()年月日
3.CURRENT_DATE()年月日
4.CURRENT_TIME()时分秒
5.CURRENT_TIMESTAMP()年月日时分秒
6.CURTIME()时分秒
7.LOCALTIME()年月日时分秒
8.LOCALTIMESTAMP()年月日时分秒
9.SYSDATE()年月日时分秒
10.SYSDATE() 日期时间函数跟 NOW() 类似,不同之处在于:NOW() 在执行开始时值就得到了, SYSDATE() 在函数执行时动态得到值。
例如
select NOW(),SLEEP(3),NOW()

select SYSDATE(),SLEEP(3),SYSDATE()

11.UTC时间
UTC_DATE(),UTC_TIME(),UTC_TIMESTAMP()
select UTC_DATE(),UTC_TIME(),UTC_TIMESTAMP(),NOW()

因为我国位于东八时区,所以本地时间 = UTC 时间 + 8 小时。UTC 时间在业务涉及多个国家和地区的时候,非常有用。

二.日期时间选取函数
1. 选取日期时间的各个部分:日期、时间、年、季度、月、周、日、小时、分钟、秒、微秒
set @dt = '2014-02-20 16:32:41.123456';
select DATE(@dt);        -- 2014-02-20
select TIME(@dt);        -- 16:32:41.123456
select YEAR(@dt);        -- 2014
select QUARTER(@dt);     -- 1
select MONTH(@dt);       -- 2
select WEEK(@dt);        -- 7(这个日期在本年的第几周,0-53)
select DAY(@dt);         -- 20
select HOUR(@dt);        -- 16
select MINUTE(@dt);      -- 32
select SECOND(@dt);      -- 41
select MICROSECOND(@dt); -- 123456
2.EXTRACT()函数
select EXTRACT(YEAR from @dt); -- 2014
select EXTRACT(QUARTER from @dt); -- 1
select EXTRACT(MONTH from @dt); -- 2
select EXTRACT(WEEK from @dt); -- 2
select EXTRACT(DAY from @dt); -- 20
select EXTRACT(HOUR from @dt); -- 16
select EXTRACT(MINUTE from @dt); -- 32
select EXTRACT(SECOND from @dt); -- 41
select EXTRACT(MICROSECOND from @dt); -- 123456

select EXTRACT(year_month from @dt); -- 201402
select EXTRACT(day_hour from @dt); -- 2016
select EXTRACT(day_minute from @dt); -- 201632
select EXTRACT(day_second from @dt); -- 20163241
select EXTRACT(day_microsecond from @dt); -- 20163241123456
select EXTRACT(hour_minute from @dt); -- 1632
select EXTRACT(hour_second from @dt); -- 163241
select EXTRACT(hour_microsecond from @dt); -- 163241123456
select EXTRACT(minute_second from @dt); -- 3241
select EXTRACT(minute_microsecond from @dt); -- 3241123456
select EXTRACT(second_microsecond from @dt); -- 41123456

三.dayof… 函数:DAYOFWEEK(), DAYOFMONTH(), DAYOFYEAR()
分别返回日期参数,在一周、一月、一年中的位置。
set @today='2014-02-21';
select DAYOFWEEK(@today) --6(1 = Sunday, 2 = Monday, …, 7 = Saturday)
select DAYOFMONTH(@today) --21
select DAYOFYEAR(@today) --52

四.week… 函数:WEEK(), WEEKOFYEAR(), DAYOFWEEK(), WEEKDAY(), YEARWEEK()
week(),dayofweek()已经介绍过
set @today='2014-02-21';
select WEEKOFYEAR(@today) --8
select WEEKDAY(@today) --4(0 = 周一 , 1 = 周二 , ... 6 = 周日 )
select YEARWEEK(@today) --201407 返回 year(2014) + week 位置(7)

五.返回星期和月份名称函数:DAYNAME(), MONTHNAME()
set @today='2014-02-21';
select DAYNAME(@today); --Friday
select MONTHNAME(@today); --February

六.LAST_DAY() 函数:返回月份中的最后一天
set @today='2014-02-21';
select LAST_DAY(@today); --2014-02-28

七.日期时间计算函数
1.为日期增加一个时间间隔:DATE_ADD(),ADDATE(), ADDTIME()
set @now=NOW();
select DATE_ADD(@now,INTERVAL 1 YEAR);
select DATE_ADD(@now,INTERVAL 1 QUARTER);
select DATE_ADD(@now,INTERVAL 1 MONTH);
select DATE_ADD(@now,INTERVAL 1 WEEK);
select DATE_ADD(@now,INTERVAL 1 DAY);
select DATE_ADD(@now,INTERVAL 1 HOUR);
select DATE_ADD(@now,INTERVAL 1 MINUTE);
select DATE_ADD(@now,INTERVAL 1 SECOND);
select DATE_ADD(@now,INTERVAL 1 MICROSECOND);

ADDATE()等价于DATE_ADD()
ADDTIME(expr ,expr2)
ADDTIME() 将 expr2 添加至 expr 然后返回结果。 expr 是一个时间或时间日期表达式,而 expr2 是一个时间表达式。
select ADDTIME(@now,'01:00:00');

2.为日期减去一个时间间隔:DATE_SUB(),SUBDATE(),SUBTIME()
set @now=NOW();
select DATE_SUB(@now,INTERVAL 1 DAY);

3.另类日期函数:PERIOD_ADD(P,N), PERIOD_DIFF(P1,P2)
PERIOD_ADD(P,N):
函数参数“P” 的格式为“YYYYMM” 或者 “YYMM”,第二个参数“N” 表示增加或减去 N month(月)。
select PERIOD_ADD(200808,2); --20081008
select PERIOD_ADD(200808,-2); --20080608

PERIOD_DIFF(P1,P2):
返回周期 P1 和 P2 之间的月份数。 P1 和 P2 的格式应该为 YYMM 或 YYYYMM 。注意周期参数 P1 和 P2 不是 日期值。
select PERIOD_DIFF(201402,201404) -- -2

4.日期、时间相减函数:DATEDIFF(expr ,expr2), TIMEDIFF(expr ,expr2)
DATEDIFF(expr ,expr2)
DATEDIFF() 返回起始时间 expr 和结束时间 expr2 之间的天数。 Expr 和 expr2 为日期或 date-and-time表达式。计算中只用到这些值的日期部分。
select DATEDIFF('2014-02-22 09:50:00','2014-02-21 09:50:00') --1

TIMEDIFF(expr ,expr2)
TIMEDIFF() 返回起始时间 expr 和结束时间 expr2 之间的时间。 expr 和 expr2 为时间或 date-and-time表达式, 两个的类型必须一样
select TIMEDIFF('2014-02-22 09:50:00','2014-02-21 09:50:00') --24:00:00

八.时间日期格式化函数
1.(时间、秒)转换函数:TIME_TO_SEC(time), SEC_TO_TIME(seconds)
select TIME_TO_SEC('10:15:00') --36900
select SEC_TO_TIME(36900) --10:15:00

2.(日期、天数)转换函数:TO_DAYS(date), from_days(days)
TO_DAYS(date):
给定一个日期 date , 返回一个天数 ( 从年份 0 开始的天数 )
select TO_DAYS('2014-02-21') --735650
select FROM_DAYS(735650) --2014-02-21

3.(字符串转换为日期)函数STR_TO_DATE(str ,format)
这是 DATE_FORMAT() 函数的倒转。它获取一个字符串 str 和一个格式字符串 format 。若格式字符串包含日期和时间部分,则 STR_TO_DATE() 返回一个 DATETIME 值, 若该字符串只包含日期部分或时间部分,则返回一个 DATE 或 TIME 值。
select STR_TO_DATE('02/21/2014', '%m/%d/%Y'); --2014-02-21
关于format,如下表


4.(日期/时间转换为字符串)函数:DATE_FORMAT(date,format),TIME_FORMAT(time,format)

5.获得国家地区时间格式函数:get_format()
select get_format(date,'usa')          ;   -- '%m.%d.%Y'
select get_format(date,'jis')          ;   -- '%Y-%m-%d'
select get_format(date,'iso')          ;   -- '%Y-%m-%d'
select get_format(date,'eur')          ;   -- '%d.%m.%Y'
select get_format(date,'internal')     ;   -- '%Y%m%d'
select get_format(datetime,'usa')      ;   -- '%Y-%m-%d %H.%i.%s'
select get_format(datetime,'jis')      ;   -- '%Y-%m-%d %H:%i:%s'
select get_format(datetime,'iso')      ;   -- '%Y-%m-%d %H:%i:%s'
select get_format(datetime,'eur')      ;   -- '%Y-%m-%d %H.%i.%s'
select get_format(datetime,'internal') ;   -- '%Y%m%d%H%i%s'
select get_format(time,'usa')          ;   -- '%h:%i:%s %p'
select get_format(time,'jis')          ;   -- '%H:%i:%s'
select get_format(time,'iso')          ;   -- '%H:%i:%s'
select get_format(time,'eur')          ;   -- '%H.%i.%s'
select get_format(time,'internal')     ;   -- '%H%i%s'

6.拼凑日期、时间函数:MAKEDATE(year,dayofyear), MAKETIME(hour,minute,second)
MAKEDATE(year,dayofyear):
给出年份值和一年中的天数值,返回一个日期。 dayofyear 必须大于 0 ,否则结果为 NULL
select MAKEDATE(2014,52) --2014-02-21

MAKETIME(hour,minute,second):
返回由 hour 、 minute 和 second 参数计算得出的时间值
select MAKETIME(10,37,0) --10:37:00

7.时区(timezone)转换函数CONVERT_TZ(dt ,from_tz ,to_tz )
CONVERT_TZ() 将时间日期值 dt 从 from_tz 给出的时区转到 to_tz 给出的时区,然后返回结果值。关于可能指定的时区的详细论述,若自变量无效,则这个函数会返回 NULL
select convert_tz('2008-08-08 12:00:00', '+08:00', '+00:00'); -- 2008-08-08 04:00:00