MySQL日期和时间函数

2019年7月15日 0 条评论 261 次阅读 0 人点赞
  • ADDDATE(EXPR, DAYS)

含义:向日期加上指定的天数

示例:

SELECT ADDDATE('2016-01-01', 7);

2016-01-01 日期中增加 7 天,计算结果:

2016-01-08

  • ADDDATE(DATE, INTERVAL EXPR UNIT)

含义:向日期加上指定的时间间隔

示例:

SELECT ADDDATE('2016-01-01', INTERVAL 31 DAY);

2016-01-01 日期中增加 31 天,计算结果:

2016-02-01

SELECT ADDDATE('2016-01-01', INTERVAL 6 MONTH);

2016-01-01 日期中增加 6 个月,计算结果:

2016-07-01

SELECT ADDDATE('2016-01-01', INTERVAL 2 QUARTER);

2016-01-01 日期中增加 2 季度,计算结果:

2016-07-01

SELECT ADDDATE('2016-01-01', INTERVAL -1 YEAR);

2016-01-01 日期中增加 -1 年(也就是减一年),计算结果:

2015-01-01

  • DATE_ADD(DATE, INTERVAL EXPR UNIT)

含义:相同于 ADDDATE 函数

  • SUBDATE(EXPR, DAYS)

含义:向日期减去指定的天数,与 ADDDATE 反义

示例:

SELECT SUBDATE('2016-01-01', 1);

2016-01-01 日期中减去 1 天,计算结果:

2015-12-31

  • SUBDATE(DATE, INTERVAL EXPR UNIT)

含义:向日期减去指定的时间间隔,与 ADDDATE 反义

示例:

SELECT SUBDATE('2016-01-01', INTERVAL 1 QUARTER);

在日期 2016-01-01 中减去 1 季度,计算结果:

2015-10-01

  • DATE_SUB(DATE, INTERVAL EXPR UNIT)

含义:相同于 SUBDATE 函数

  • ADDTIME(EXPR1, EXPR2)

含义:在日期 EXPR1 中加上 EXPR2

示例:

SELECT ADDTIME("2016-01-01 00:00:00", "01:00:00");

在日期 2016-01-01 00:00:00 中增加 01:00:00 ,计算结果:

2016-01-01 01:00:00

  • SUBTIME(EXPR1, EXPR2)

含义:在日期 EXPR1 中减去 EXPR2

示例:

SELECT SUBTIME("2016-01-01 01:00:00", "01:00:00");

在日期 2016-01-01 01:00:00 减去 01:00:00,计算结果:

2016-01-01 00:00:00

  • CONVERT_TZ(DATE, FROM_TZ, TO_TZ)

含义:将 FROM_TZ 时区的时间转换为 TO_TZ 时区的时间

示例:

SELECT CONVERT_TZ('2016-10-01 08:00:00', '+08:00', '+9:00');

+08:00 时区的日期 2016-10-01 08:00:00 转换为 +9:00 时区的日期,计算结果:

2016-10-01 09:00:00

  • CURDATE()

含义:当前日期

示例:

SELECT CURDATE();

获取当前日期,计算结果:

2016-01-01

  • CURRENT_DATE()

含义:相同于 CURDATE 函数

  • CURTIME()

含义:当前时间

示例:

SELECT CURTIME();

获取当前时间,计算结果:

02:20:56

  • CURRENT_TIME()

含义:相同于 CURTIME 函数

  • NOW()

含义:当前日期时间

示例:

SELECT NOW();

获取当前的日期时间,计算结果:

2016-01-01 02:22:51

  • LOCALTIME()

含义:相同于 NOW 函数

  • LOCALTIMESTAMP()

含义:相同于 NOWLOCALTIME 函数

  • SYSDATE()

含义:当前的系统日期时间

示例:

SELECT SYSDATE();

获取当前的系统日期时间,计算结果:

2016-01-01 02:23:20

  • DATE(EXPR)

含义:提取 EXPR 的日期部分

示例:

SELECT DATE('2016-01-01 08:00:00');

提取日期,计算结果:

2016-01-01

  • TIME(EXPR)

含义:提取 EXPR 的时间部分

示例:

SELECT DATE('2016-01-01 08:02:00');

提取时间,计算结果:

08:02:00

  • DATEDIFF(EXPR1, EXPR2)

含义:计算 EXPR1EXPR2 日期间隔

示例:

SELECT DATEDIFF('2016-01-01 08:00:00', '2016-01-02 08:00:00');

计算时间 2016-01-01 08:00:00 和时间 2016-01-02 08:00:00 的日期间隔,计算结果:

-1

  • TIMEDIFF(EXPR1, EXPR2)

含义:计算 EXPR1EXPR2 时间间隔

示例:

SELECT DATEDIFF('2016-01-01 08:00:00', '2016-01-02 08:00:01');

计算时间 2016-01-01 08:00:00 和时间 2016-01-02 08:00:01 的时间间隔,计算结果:

-1

  • DATE_FORMAT(DATE, FORMAT)

含义:格式化日期

可用格式化参数:

格式符 说明
%a 工作日的缩写名称(Sun..Sat)
%b 月份的缩写名称(Jan..Dec)
%c 月份,数字形式(0..12)
%D 带有英语后缀的该月日期(0th, 1st, 2nd, 3rd, ...)
%d 该月日期,数字形式(00..31)
%e 该月日期,数字形式(0..31)
%f 微秒(000000..999999)
%H 小时(00..23)
%h 小时(01..12)
%I 小时(01..12)
%i 分钟,数字形式(00..59)
%j 一年中的天数,(001..366)
%k 小时(0..23)
%l 小时(1..12)
%M 月份名称(January..December)
%m 月份,数字形式(00..12)
%p 上午(AM)或下午(PM)
%r 时间,12 小时制 (hh:mm:ss AM or PM)
%S 秒(00..59)
%s 秒(00..59)
%T 时间,24小时制(hh:mm:ss)
%U 周(00..53),其中周日为每周的第一天
%u 周(00..53),其中周一为每周的第一天
%V 周(01..53),其中周日为每周的第一天;和 %X 同时使用
%v 周(01..53),其中周一为每周的第一天;和 %x 同时使用
%W 工作日名称(Sunday..Saturday)
%w 一周中的每日(0=周日..6=周六)
%X 该周的年份,其中周日为每周的第一天,数字形式,4位数;和%V同时使用
%x 该周的年份,其中周一为每周的第一天,数字形式,4位数;和%v同时使用
%Y 年份,数字形式,4位数
%y 年份,数字形式,2位数
%% % 字符

示例:

SELECT DATE_FORMAT('2016-10-01 08:00:00', '%W %M %Y');

格式化时间,计算结果:

Wednesday October 2014

  • STR_TO_DATE(STR, FORMAT)

含义:相反与 DATE_FORMAT 函数,将给定的字符串 STRFORMAT 格式解析成日期

  • TIME_FORMAT(TIME, FORMAT)

含义:用法与 DATE_FORMAT 一样,但可能只处理时,分,秒和微秒

示例:

SELECT TIME_FORMAT('16:30:00', '%h:%i %p');

计算结果:

04:30 PM

  • DAYOFMONTH(DATE)

含义:该月份的第几天

示例:

SELECT DAYOFMONTH('2016-01-01');

计算结果:

1

  • DAYOFYEAR(DATE)

含义:该年的第几天

示例:

SELECT DAYOFMONTH('2016-01-01');

计算结果:

1

  • DAYOFWEEK(DATE)

含义:星期对应的索引值(1表示周日,2表示周一,……7 表示周六)

示例:

SELECT DAYOFWEEK('2016-01-01');

计算结果:

6

  • WEEKDAY(DATE)

含义:星期对应的索引值(0表示周一,1表示周二,……6 表示周日)

示例:

SELECT WEEKDAY('2016-01-01');

计算结果:

4

  • DAYNAME(DATE)

含义:星期的名称

示例:

SELECT DAYNAME('2016-01-01');

计算结果:

Friday

  • MONTHNAME(DATE)

含义:月份的名称

示例:

SELECT MONTHNAME('2016-01-01');

计算结果:

January

  • EXTRACT(UNIT FROM DATE)

含义:提取日期 DATE 中的 UNIT 部分

示例:

SELECT EXTRACT(YEAR FROM '2016-01-01');

计算结果:

2016

  • FROM_UNIXTIME(UNIX_TIMESTAMP)

含义:将时间戳 UNIX_TIMESTAMP 格式化成字符串形式

示例:

SELECT FROM_UNIXTIME(1414066392);

计算结果:

2014-10-23 20:13:12

  • FROM_UNIXTIME(UNIX_TIMESTAMP, FORMAT)

含义:相同于 FROM_UNIXTIME 函数,FORMAT 相同于 DATE_FORMAT

  • GET_FORMAT({DATE|TIME|DATETIME}, {'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL'})

含义:返回一个格式字符串

可用参数:

函数调用 结果
GET_FORMAT(DATE,'USA') '%m.%d.%Y'
GET_FORMAT(DATE,'JIS') '%Y-%m-%d'
GET_FORMAT(DATE,'ISO') '%Y-%m-%d'
GET_FORMAT(DATE,'EUR') '%d.%m.%Y'
GET_FORMAT(DATE,'INTERNAL') '%Y%m%d'
GET_FORMAT(DATETIME,'USA') '%Y-%m-%d-%H.%i.%s'
GET_FORMAT(DATETIME,'JIS') '%Y-%m-%d %H:%i:%s'
GET_FORMAT(DATETIME,'ISO') '%Y-%m-%d %H:%i:%s'
GET_FORMAT(DATETIME,'EUR') '%Y-%m-%d-%H.%i.%s'
GET_FORMAT(DATETIME,'INTERNAL') '%Y%m%d%H%i%s'
GET_FORMAT(TIME,'USA') '%h:%i:%s %p'
GET_FORMAT(TIME,'JIS') '%H:%i:%s'
GET_FORMAT(TIME,'ISO') '%H:%i:%s'
GET_FORMAT(TIME,'EUR') '%H.%i.%S'
GET_FORMAT(TIME,'INTERNAL') '%H%i%s'

示例:

SELECT GET_FORMAT(DATE, 'EUR');

计算结果:

%d.%m.%Y

  • LAST_DAY(DATE)

含义:当月的最后一天

示例:

SELECT LAST_DAY('2016-01-01');

计算结果:

31

  • YEAR(DATE)

含义:日期对应的年份

示例:

SELECT YEAR('2016-01-01');

计算结果:

2016

  • QUARTER(DATE)

含义:日期对应的季度

示例:

SELECT QUARTER('2016-01-01');

计算结果:

1

  • MONTH(DATE)

含义:日期对应的月份

示例:

SELECT MONTH('2016-01-01');

计算结果:

1

  • WEEK(DATE[, MODE])

含义:日期对应的星期数

参数 MODE 为计算规则:

MODE 一周的第一天 范围 第几周
0 星期日 0-53 今年的一个星期日
1 星期一 0-53 4天或更多天
2 星期日 1-53 今年的周日
3 星期一 1-53 4天或更多天
4 星期日 0-53 4天或更多天
5 星期一 0-53 今年的周日
6 星期日 1-53 4天或更多天
7 星期一 1-53 今年的周日

示例:

SELECT WEEK('2014-01-01', 1);

计算结果:

1

暂时没有研究明白该函数是干什么用?

  • DAY(DATE)

含义:相同与 DAYOFMONTH 函数

  • HOUR(TIME)

含义:时间对应的小时数

示例:

SELECT HOUR('12:20:15');

计算结果:

12

  • MINUTE(TIME)

含义:时间对应的分钟数

示例:

SELECT HOUR('12:20:15');

计算结果:

20

  • SECOND(TIME)

含义:时间对应的秒数

示例:

SELECT HOUR('12:20:15');

计算结果:

15

  • MICROSECOND(EXPR)

含义:时间表达式 EXPR 对应的微秒数

示例:

SELECT MICROSECOND('12:00:00.123456');

计算结果:

123456

  • MAKEDATE(YEAR, DAYFORYEAR)

含义:根据给定的年份和天数得到一个日期

示例:

SELECT MAKEDATE(2016, 32);

计算结果:

2016-02-01

  • MAKETIME(HOUR, MINUTE, SECOND)

含义:根据给定的时分秒得到一个时间

示例:

SELECT MAKETIME(12,30,0);

计算结果:

12:30:00

  • PERIOD_ADD(P, N)

含义:添加 N 个月至周期 P (格式为 YYMMYYYYMM ),返回格式为 YYYYMM ,注意周期参数不是日期值

示例:

SELECT PERIOD_ADD(201601, 3);

计算结果:

201604

  • PERIOD_DIFF(P1, P2)

含义:返回周期 P1P2 之间的月份数, P1P2 的格式为 YYMMYYYYMM,注意周期参数不是日期值

示例:

SELECT PERIOD_DIFF(201601, 1501);

计算结果:

12

  • SEC_TO_TIME(SECONDS)

含义:将给定的秒数转换成时分秒格式

示例:

SELECT SEC_TO_TIME(3661);

计算结果:

01:01:01

SELECT SEC_TO_TIME(3661) + 0;

计算结果:

10101

  • TIME_TO_SEC(TIME)

含义:将时间 time 转换为秒数

示例:

SELECT TIME_TO_SEC('02:00:01');

计算结果:

7201

  • TIMESTAMP(EXPR)

含义:表达式 EXPR 的日期时间值

示例:

SELECT TIMESTAMP('2016-01-01');

计算结果:

2016-01-01 00:00:00

  • TIMESTAMP(EXPR1, EXPR2)

含义:将表达式 EXPR2 添加到表达式 EXPR1 的结果的日期时间值

示例:

SELECT TIMESTAMP('2016-01-01 12:00:00','12:00:00');

计算结果:

2016-01-02 00:00:00

  • TIMESTAMPADD(UNIT, INTERVAL, DATAETIME_EXPR)

含义:向给定的日期时间值加上指定的时间间隔

示例:

SELECT TIMESTAMPADD(MONTH, 1, '2016-01-01 12:00:00');

计算结果:

2016-02-01 12:00:00

  • TIMESTAMPDIFF(UNIT, DATAETIME_EXPR1, DATAETIME_EXPR2)

含义:日期时间表达式 DATAETIME_EXPR1DATAETIME_EXPR2 的时间间隔,单位由 UNIT 给定

示例:

SELECT TIMESTAMPDIFF(HOUR, '2016-01-01 12:00:00', '2016-01-01 13:30:00');

计算结果:

1

  • UNIX_TIMESTAMP()

含义:当前时间的 UNIX 时间戳

示例:

SELECT UNIX_TIMESTAMP();

计算结果:

1414330231

  • UNIX_TIMESTAMP(DATE)

含义:DATE 对应的 UNIX 时间戳

示例:

SELECT UNIX_TIMESTAMP('2014-10-01 12:00:00');

计算结果:

1412136000

  • UTC_DATE()

含义:当前的 UTC 日期

示例:

SELECT UTC_DATE();

计算结果:

2016-01-01

  • UTC_TIME()

含义:当前的 UTC 时间

示例:

SELECT UTC_TIME();

计算结果:

13:31:18

  • UTC_TIMESTAMP()

含义:当前的 UTC 日期时间

示例:

SELECT UTC_TIMESTAMP();

计算结果:

2016-01-02 13:31:18

  • WEEKOFYEAR(DATE)

含义:相同与 WEEK 函数

  • YEARWEEK(DATE[, MODE])

含义:日期对应的年份和星期数,参数 MODEWEEK 函数相同。

示例:

SELECT YEARWEEK('2014-01-01');

计算结果:

201352

qianmoQ

qianmoQ

这个人太懒什么东西都没留下

文章评论(0)