本文内容取自mysql官方文档,本文只是针对官方文档内容做了个总结,并列举了一些例子方便对函数进行理解,文中包含了官方文档所列出的所有日期时间相关的函数。
官方文档地址:https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html
为了避免产生歧义,首先说明一下,文中所说的日期(date)是指只包含年月日的日期,也就是不包含时间部分,时间(time)是指只包含时分钞(毫秒)的时间部分,也就是不包含日期部分,日期时间(datetime或timestamp)则是包含日期和时间。
文中提到的所有和日期格式化相关的功能,都可以参考附2中的格式化语法
对于有些函数,mysql会根据函数使用环境不同返回不同的格式,例如,select now(); 返回格式为"2021-06-20 11:20:30",而如果函数与数字进行了运算,就会返回数字格式(没有分隔符的格式),如select now()+0; 返回格式为20210620112030。下文中提到“返回格式与上下文有关”时,即是指这种情况。
mysql的日期表示有以下几种形式
日期时间的表示有以下几种形式:
通过在秒后面加.xxx即可表示,如'2012-12-31 11:30:45.123', mysql最高精确到微秒,也就是小数点后6位。注意在建立表字段时要指定日期的长度,以使用毫秒微秒的功能,如 CREATE TABLE `date_time_demo`(`t_datetime6` DATETIME(6)),如果不在括号中指定DATETIME的长度,mysql默认长度为0,也就是只保存到秒。
▶ 函数:
ADDDATE(date,INTERVAL expr unit)
▶ 作用:
日期加减
date是要操作的日期
interval是关键字
expr是要加减的数量
unit是要加减的单位,unit可以有多种表示,如DAY, MONTH, YEAR,具体可参考https://dev.mysql.com/doc/refman/8.0/en/expressions.html#temporal-intervals
▶ 举例:
SELECT ADDDATE('2020-01-01', INTERVAL 10 DAY)
> '2020-01-11'
SELECT ADDDATE('2020-01-01', INTERVAL 13 MONTH)
> '2021-02-01'
▶ 函数:
ADDDATE(date,days)
▶ 作用:
日期加减
date为要操作的日期
days为要加减的天数
这种用法由于没有指定unit,所以默认是加减天数。
▶ 举例:
SELECT ADDDATE('2020-01-01', 32)
> '2020-02-02'
▶ 函数:
ADDTIME(expr1,expr2)
▶ 作用:
时间加法
expr1: 被加的对象
expr2: 要加的数量
▶ 举例:
SELECT ADDTIME('2021-01-01 23:59:59', '0:0:1')
> '2021-01-02 00:00:00'
▶ 函数:
CURDATE()
▶ 作用:
返回当前日期。返回格式与上下文有关
▶ 举例:
SELECT CURDATE()
> '2021-06-05'(根据当前时间不同返回结果会不同)
SELECT CURDATE() + 1
> 20210606
▶ 函数:
CURRENT_DATE, CURRENT_DATE()
▶ 作用:
等同于CURDATE()
▶ 函数:
CURRENT_TIME, CURRENT_TIME([fsp])
▶ 作用:
等同于CURTIME()
CURTIME()用法见后文
▶ 函数:
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP([fsp])
▶ 作用:
等同于NOW()
NOW()用法见后文
▶ 函数:
CURTIME([fsp])
▶ 作用:
返回当前时间,fsp用来指定是否返回秒后面的小数部分,取值0-6
返回形式为'hh:ss:mm'或hhssmm,返回格式与上下文有关。
▶ 举例:
SELECT CURTIME();
> 17:40:03
SELECT CURTIME()+5;
> 174008
SELECT CURTIME(6);
> 17:40:03.509650
▶ 函数:
DATE(expr)
▶ 作用:
返回指定日期时间的日期部分
▶ 举例:
SELECT DATE('2021-06-07 12:12:12')
> 2021-06-07
▶ 函数:
DATEDIFF(expr1, expr2)
▶ 作用:
返回两个日期的天数差,时间部分会忽略计算。
▶ 举例:
SELECT DATEDIFF('2021-06-07 12:12:12', '2021-07-09 13:13:13')
> -32
SELECT DATEDIFF('2021-06-07', '2021-06-06')
> 1
▶ 函数:
DATE_ADD(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit)
▶ 作用:
日期和时间的加减,这个函数既可以对日期进行加减,也可以对时间进行加减。
我自己就不举例了,直接copy了官方文档中的例子,例子比较多,放在了文后附1。
▶ 举例:
例子见附1
▶ 函数:
DATE_FORMAT(date, format)
▶ 作用:
对日期按照指定的format进行格式化显示。format的取值见附表2。
▶ 举例:
SELECT DATE_FORMAT(NOW(6), '现在是%Y年%m月%d日%H时%i分%s.%f秒,是一年中的第%U个星期(周日为一周的第一天),星期用英文表示是%W')
> 现在是2021年06月07日21时13分47.530258秒,是一年中的第23个星期(周日为一周的第一天),星期用英文表示是Monday
▶ 函数:
DAY(date), DAYOFMONTH(date)
▶ 作用:
返回日期中的"日"部分
▶ 举例:
SELECT DAY('2021-06-07');
> 7
▶ 函数:
DAYNAME(date)
▶ 作用:
返回指定日期是星期几
▶ 举例:
SELECT DAYNAME('2021-06-07');
> Monday
▶ 函数:
DAYOFWEEK(date)
▶ 作用:
返回指定日期是一周中的第几天1=周日,2=周一...,7=周六
▶ 举例:
SELECT DAYOFWEEK('2021-06-07');
> 2
▶ 函数:
DAYOFYEAR(date)
▶ 作用:
返回指定日期是一年中的第几天
▶ 举例:
SELECT DAYOFYEAR('2021-06-07');
> 158
▶ 函数:
EXTRACT(unit FROM date)
▶ 作用:
从指定日期(date)中提取指定单位(unit)的数据,unit的取值与前面ADDDATE函数中提到的unit相同。
▶ 举例:
SELECT EXTRACT(YEAR FROM '2021-06-07');
> 2021
SELECT EXTRACT(YEAR_MONTH FROM '2021-06-07 01:02:03');
> 202106
SELECT EXTRACT(DAY_MINUTE FROM '2021-06-07 01:02:03');
> 70102
▶ 函数:
FROM_DAYS(N)
▶ 作用:
给定一个天数N,返回一个日期。
这个天数是指从0000-00-00开始的天数,比如0001-01-01距离0000-00-00是366天,所以FROM_DAYS(366)会返回0001-01-01。但是要注意,N小于366均会返回'0000-00-00'
▶ 举例:
SELECT FROM_DAYS(366);
> 0001-01-01
SELECT FROM_DAYS(369);
> 0001-01-04
▶ 函数:
FROM_UNIXTIME(unix_timestamp[,format])
▶ 作用:
给定一个unix时间戳,返回对应的日期时间。返回格式与上下文有关。format可以用来指定返回的格式。
▶ 举例:
SELECT FROM_UNIXTIME(1609430400);
> 2021-01-01 00:00:00
SELECT FROM_UNIXTIME(1609430400, '%Y年%m月%d日');
> 2021年01月01日
SELECT FROM_UNIXTIME(1609430400) + 1;
> 20210101000001
SELECT FROM_UNIXTIME(0);
> 1970-01-01 08:00:00
▶ 函数:
GET_FORMAT({DATE|TIME|DATETIME}, {'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL'})
▶ 作用:
返回格式化字符串,这个函数可以配合DATE_FORMAT()和STR_TO_DATE使用。我们格式化字符串的时候自己手写格式化的样式比较麻烦,可以用这个函数来实现。
▶ 举例:
SELECT GET_FORMAT(DATE,'ISO')
> %Y-%m-%d(更多示例见附表3)
▶ 函数:
HOUR(time)
▶ 作用:
返回指定时间的小时部分
▶ 举例:
SELECT HOUR('10:05:03');
> 10
SELECT HOUR('272:59:59');
> 272
▶ 函数:
LAST_DAY(date)
▶ 作用:
返回指定日期的当月最后一天
▶ 举例:
SELECT LAST_DAY('2021-02-05');
> 2021-02-28
SELECT LAST_DAY('2021-02-29')
> NULL(指定的日期格式不对会返回NULL)
▶ 函数:
LOCALTIME, LOCALTIME([fsp])
▶ 作用:
同NOW(),NOW()的用法见后文
▶ 函数:
LOCALTIMESTAMP, LOCALTIMESTAMP([fsp])
▶ 作用:
同NOW(),NOW()的用法见后文
▶ 函数:
MAKEDATE(year,dayofyear)
▶ 作用:
给定一个年份(year),再给定一个一年中的天数(day of year),返回对应的天数是一年中的哪个日期。指定的dayofyear必须大于零,否则返回NULL
▶ 举例:
SELECT MAKEDATE(2021,31)
> 2021-01-31
SELECT MAKEDATE(2021,32)
> 2021-02-01
SELECT MAKEDATE(2021,0)
> NULL
SELECT MAKEDATE(2021,366)
> 2022-01-01
▶ 函数:
MAKETIME(hour,minute,second)
▶ 作用:
根据指定的hour, minute, second,返回时间
▶ 举例:
SELECT MAKETIME(12,13,14);
> 12:13:14
SELECT MAKETIME(12,13,14)+0;
> 121314
SELECT MAKETIME(12,13,60);
> NULL
SELECT MAKETIME(12,13,14.123456);
> 12:13:14.123456
▶ 函数:
MICROSECOND(expr)
▶ 作用:
根据指定的time或datetime返回秒小数点后的部分,返回数据在0-999999之间
▶ 举例:
SELECT MICROSECOND('12:00:00.123456');
> 123456
SELECT MICROSECOND('2019-12-31 23:59:59.000010');
> 10
▶ 函数:
MINUTE(time)
▶ 作用:
返回时间的分钟部分,范围在0-59
▶ 举例:
SELECT MINUTE('12:13:14')
> 13
▶ 函数:
MONTH(date)
▶ 作用:
返回日期的月份,范围1-12,对于没有指定月份的日期,会返回0
▶ 举例:
SELECT MONTH('2021-06-17')
> 6
SELECT MONTH('2021-00-00')
> 0
SELECT MONTH('2021')
> NULL
SELECT MONTH('2021-13-14')
> NULL
▶ 函数:
MONTHNAME(date)
▶ 作用:
返回日期的月份名称
▶ 举例:
SELECT MONTHNAME('2021-01-14')
> January
▶ 函数:
NOW([fps])
▶ 作用:
返回当前的日期时间,fps用来指定是否返回秒后面的小数,取值0-6。
注意,如果有同一个sql或同一个函数、同一个存储过程中多次调用NOW(),会返回同样的值,即函数或存储过程在开始调用时的时间。
比如SELECT NOW(), SLEEP(2), NOW();返回结果如下:
NOW() | SLEEP(2) | NOW()
2021-06-16 20:39:06 | 0 | 2021-06-16 20:39:06
如果想每次调用返回当前时间,可使用SYSDATE()
SELECT SYSDATE(), SLEEP(2), SYSDATE();
SYSDATE() | SLEEP(2) | SYSDATE()
2021-06-16 20:42:09 | 0 | 2021-06-16 20:42:11
SYSDATE()的使用见后文。
▶ 举例:
SELECT NOW()
> 2021-06-16 20:32:45
SELECT NOW(6)
> 2021-06-16 20:33:07.878247
▶ 函数:
PERIOD_ADD(P, N)
▶ 作用:
将指定的日期P加上N个月,注意P是YYYYMM或YYMM形式的日期,不能是带分隔符的字符串形式
▶ 举例:
SELECT PERIOD_ADD(202106, 3)
> 202109
SELECT PERIOD_ADD(202106, 7)
> 202201
▶ 函数:
PERIOD_DIFF(P1, P2)
▶ 作用:
返回两个日期相差的月份,注意P1,P2是YYYYMM或YYMM形式的日期,不能是带分隔符的字符串形式
▶ 举例:
SELECT PERIOD_DIFF(202106, 202109)
> -3
SELECT PERIOD_DIFF(202203, 202109)
> 6
▶ 函数:
QUARTER(date)
▶ 作用:
返回指定日期的季度,取值1-4
▶ 举例:
SELECT QUARTER('2021-06-01')
> 2
SELECT QUARTER('2021-06')
> NULL
▶ 函数:
SECOND(time)
▶ 作用:
返回指定时间的秒部分
▶ 举例:
SELECT SECOND('11:12:13')
> 13
▶ 函数:
SEC_TO_TIME(seconds)
▶ 作用:
将给定的秒数转换成时间
▶ 举例:
SELECT SEC_TO_TIME(59);
> 00:00:59
SELECT SEC_TO_TIME(60);
> 00:01:00
SELECT SEC_TO_TIME(3600)+0;
> 10000
▶ 函数:
STR_TO_DATE(str, format)
▶ 作用:
将给定的字符串解析成日期(时间),format用来指定解析规则。可以认为是DATE_FORMAT()的反函数。
如果字符串只包含日期,则函数返回日期,如果只包含时间,则返回时间,如果包含日期时间,则返回日期时间。错误的格式返回NULL
▶ 举例:
SELECT STR_TO_DATE('06,20,2021', '%m,%d,%Y')
> 2021-06-20
SELECT STR_TO_DATE('06-20-2021', '%m,%d,%Y')
> NULL(解析错误,返回NULL)
▶ 函数:
SUBDATE(date,INTERVAL expr unit), SUBDATE(expr,days)
▶ 作用:
将给定的日期减去给定的时间,更多细节说明可参考前面的ADDDATE()函数
▶ 举例:
SELECT SUBDATE('2021-06-20', INTERVAL 5 DAY)
> 2021-06-15
SELECT SUBDATE('2021-06-20', 5)
> 2021-06-15
▶ 函数:
SUBTIME(expr1,expr2)
▶ 作用:
时间减法,结果为expr1-expr2,expr1为时间或日期时间,expr2为时间。
▶ 举例:
SELECT SUBTIME('2021-06-20 11:12:13.123456', '1:2:3.123123')
> 2021-06-20 10:10:10.000333
▶ 函数:
SYSDATE([fsp])
▶ 作用:
返回当前系统时期时间,格式为 'YYYY-MM-DD hh:mm:ss' 或 YYYYMMDDhhmmss,返回格式与上下文有关。fsp用来指定精确到秒以后多少位。注意区分这个函数与NOW()的区别(前面已经对比过)
▶ 举例:
SELECT SYSDATE(4)
> 2021-06-20 11:26:49.9213
▶ 函数:
TIME(expr)
▶ 作用:
提取给定日期时间的时间部分
▶ 举例:
SELECT TIME('2021-06-20 11:12:13.123')
> 11:12:13.123
SELECT TIME('2021-06-20 11:12:13.123')+0
> 111213.123
▶ 函数:
TIMEDIFF(expr1,expr2)
▶ 作用:
返回expr1-expr2的值,expr1和expr2可以是time或datetime,但是expr1和expr2的类型要保持一致。
▶ 举例:
SELECT TIMEDIFF('11:12:13.123', '1:2:3.111')
> 10:10:10.012
SELECT TIMEDIFF('2021-06-20 11:12:13.123', '2021-06-19 1:2:3.111')
> 34:10:10.012
▶ 函数:
TIMESTAMP(expr), TIMESTAMP(expr1,expr2)
▶ 作用:
对于一个参数的TIMESTAMP,会返回给定字符串的datetime类型。
对于两个参数的TIMESTAMP,会把expr2的时间加到expr1上,然后返回类型为datetime的值。
▶ 举例:
SELECT TIMESTAMP('2021-01-02')
> 2021-01-02 00:00:00
SELECT TIMESTAMP('2021-01-02 12:00:00', '12:00:00')
> 2021-01-03 00:00:00
▶ 函数:
TIMESTAMPADD(unit,interval,datetime_expr)
▶ 作用:
将date_time_expr加上指定的interval。unit指定单位,可以取以下值: MICROSECOND (microseconds), SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or YEAR.
▶ 举例:
SELECT TIMESTAMPADD(MINUTE, 5, '2021-06-20')
> 2021-06-20 00:05:00
SELECT TIMESTAMPADD(MINUTE, 5, '2021-06-20 12:55:00')
> 2021-06-20 13:00:00
▶ 函数:
TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2)
▶ 作用:
datetime_expr2-datetime_expr1的值(注意和TIMEDIFF等函数不一样,这个是后一个值减前一个值),unit用来指定是哪一部分的数据进行相减,取值和TIMESTAMPADD函数中的unit一样。
▶ 举例:
SELECT TIMESTAMPDIFF(DAY, '2020-06-20 11:12:13.123', '2020-06-21 11:12:14.456')
> 1
SELECT TIMESTAMPDIFF(MINUTE, '2020-06-20 11:12:13.123', '2020-06-21 11:13:14.456')
> 1441
▶ 函数:
TIME_FORMAT(time, format)
▶ 作用:
用法和 DATE_FORMAT() 类似,只是format中只允许出现和时间相关的格式化字符串。
▶ 举例:
SELECT TIME_FORMAT('11:12:13.123', '%H时%i分%s秒%f微秒')
> 11时12分13秒123000微秒
▶ 函数:
TIME_TO_SEC(time)
▶ 作用:
将时间转换成秒数
▶ 举例:
SELECT TIME_TO_SEC('00:1:10')
> 70
▶ 函数:
TO_DAYS(date), TO_SECONDS(expr)
▶ 作用:
个人认为这两个函数意义不大,不怎么用,本文就不再讲解,想了解的可以下面给出的链接。
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_to-dayshttps://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_to-seconds
▶ 函数:
UNIX_TIMESTAMP([date])
▶ 作用:
返回指定date的unit时间戳(date时间到'1970-01-01 00:00:00 UTC'之间的秒数),如果date没指定,默认当前时间。
指定的日期如果超过了'2038-01-19 03:14:07.999999 UTC',或小于'1970-01-01 00:00:00 UTC',会返回0。
▶ 举例:
SELECT UNIX_TIMESTAMP()
> 1624164163
SELECT UNIX_TIMESTAMP('1970-01-01 08:00:10')
> 10(因为中国在东八区,1970-01-01 08:00:10相当于UTC时间1970-01-01 00:00:10),所以返回值为10。
SELECT UNIX_TIMESTAMP('2040-01-01 08:00:10')
> 0
▶ 函数:
UTC_DATE, UTC_DATE(), UTC_TIME, UTC_TIME([fsp]), UTC_TIMESTAMP, UTC_TIMESTAMP([fsp])
▶ 作用:
返回当前的UTC日期(时间)比如现在北京时间是2021-06-20 08:00:00,则返回2021-06-20 00:00:00返回格式与上下文有关
▶ 举例:
SELECT UTC_DATE;
> 2021-06-20
SELECT UTC_TIME(6)
> 04:53:08.463980
SELECT UTC_TIMESTAMP(6)
> 2021-06-20 04:53:28.969184
▶ 函数:
WEEK(date, [mode])
▶ 作用:
返回当前日期是一年中的第几周。
mode参数用来指定周一为一周第一天还是周日为一周第一天,以及返回值为0-53,还是1-53。
mode的具体使用规则见附4
▶ 举例:
SELECT WEEK('2021-06-30')
> 26
▶ 函数:
WEEKDAY(date)
▶ 作用:
返回指定的日期是周几。
0=Monday, 1=Tuesday, … 6=Sunday
▶ 举例:
SELECT WEEKDAY('2021-06-30')
> 2(周三)
▶ 函数:
WEEKOFYEAR(date)
▶ 作用:
返回指定日期所在的周是一年中的第几周相当于WEEK(date, 3)
▶ 举例:
SELECT WEEKOFYEAR('2021-06-30')
> 26
▶ 函数:
YEAR(date)
▶ 作用:
返回指定日期的年份
▶ 举例:
SELECT YEAR('2021-06-30')
> 2021
▶ 函数:
YEARWEEK(date), YEARWEEK(date,mode)
▶ 作用:
返回指定日期的年份及对应的周数。
mode的取值和WEEK()函数相同,但是要注意WEEK()函数有可能返回0,但是YEARWEEK()函数不会返回0值。这个大家试几个例子就知道了,或者具体看一下官网文档的解释。
▶ 举例:
SELECT YEARWEEK('2021-06-30')
> 202126
附1
mysql> SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY);
-> '2018-05-02'
mysql> SELECT DATE_SUB('2018-05-01',INTERVAL 1 YEAR);
-> '2017-05-01'
mysql> SELECT DATE_ADD('2020-12-31 23:59:59',
INTERVAL 1 SECOND);
-> '2021-01-01 00:00:00'
mysql> SELECT DATE_ADD('2018-12-31 23:59:59',
INTERVAL 1 DAY);
-> '2019-01-01 23:59:59'
mysql> SELECT DATE_ADD('2100-12-31 23:59:59',
INTERVAL '1:1' MINUTE_SECOND);
-> '2101-01-01 00:01:00'
mysql> SELECT DATE_SUB('2025-01-01 00:00:00',
INTERVAL '1 1:1:1' DAY_SECOND);
-> '2024-12-30 22:58:59'
mysql> SELECT DATE_ADD('1900-01-01 00:00:00',
INTERVAL '-1 10' DAY_HOUR);
-> '1899-12-30 14:00:00'
mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
-> '1997-12-02'
mysql> SELECT DATE_ADD('1992-12-31 23:59:59.000002',
INTERVAL '1.999999' SECOND_MICROSECOND);
-> '1993-01-01 00:00:01.000001'
附2
标识符 | 含义 |
%a | Abbreviated weekday name (Sun..Sat) 星期的缩写,如Sun, Sat |
%b | Abbreviated month name (Jan..Dec) 月份的缩写,如Jan, Dec |
%c | Month, numeric (0..12) 月的数字表示,因为mysql允许不完全的日期形式,如'2014-00-00',所以月以及下面提到的的日的数字表示都是可以为0。 |
%D | Day of the month with English suffix (0th, 1st, 2nd, 3rd, …) 月份中的第几天,后面会加上后缀 |
%d | Day of the month, numeric (00..31) 月份中的第几天,小于10的前面补0 |
%e | Day of the month, numeric (0..31) 月份中的第几天,含义同上,小于10的前面不补0 |
%f | Microseconds (000000..999999) 微秒 |
%H | Hour (00..23) 小时(24小时制),小于10的前面补零 |
%h | Hour (01..12) 小时(12小时制),小于10的前面补零 |
%I | Hour (01..12) 小时(12小时制),同上 |
%i | Minutes, numeric (00..59) 分钟 |
%j | Day of year (001..366) 一年中的第几天 |
%k | Hour (0..23) 小时(24小时制),小于10的前面不补零 |
%l | Hour (1..12) 小时(12小时制),小于10的前面不补零 |
%M | Month name (January..December) 月份,用英文名表示,如January |
%m | Month, numeric (00..12) 月份,小于10的前面补零 |
%p | AM or PM 显示是上午(AM)还是下午(PM) |
%r | Time, 12-hour (hh:mm:ss followed by AM or PM) 时间,12小时制,后面加上AM或PM表示上午或下午 |
%S | Seconds (00..59) 秒 |
%s | Seconds (00..59) 秒,同上 |
%T | Time, 24-hour (hh:mm:ss) 时间,24小时制 |
%U | Week (00..53), where Sunday is the first day of the week; WEEK() mode 0 一年中的第几周,周日为一周的第一天 |
%u | Week (00..53), where Monday is the first day of the week; WEEK() mode 1 一年中的第几周,周一为一周的第一天 |
%V | Week (01..53), where Sunday is the first day of the week; WEEK() mode 2; used with %X 一年中的第几周,周日为一周的第一天 |
%v | Week (01..53), where Monday is the first day of the week; WEEK() mode 3; used with %x 一年中的第几周,周一为一周的第一天 |
%W | Weekday name (Sunday..Saturday) 星期几,英文的表示。如Sunday |
%w | Day of the week (0=Sunday..6=Saturday) 星期中的第几天,0表示周日,6表示周六 |
%X | Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V |
%x | Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v |
%Y | Year, numeric, four digits 年,用4位数字表示 |
%y | Year, numeric (two digits) 年,用2位数字表示 |
%% | A literal % character %的表示,想要表示%本身需要用两个% |
%x | x, for any “x” not listed above |
附表3
函数调用 | 结果 |
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' |
附4
Mode |
一周的第一天 |
返回值范围 |
Week 1 is the first week … |
0 |
周日 |
0-53 |
with a Sunday in this year |
1 |
周一 |
0-53 |
with 4 or more days this year |
2 |
周日 |
1-53 |
with a Sunday in this year |
3 |
周一 |
1-53 |
with 4 or more days this year |
4 |
周日 |
0-53 |
with 4 or more days this year |
5 |
周一 |
0-53 |
with a Monday in this year |
6 |
周日 |
1-53 |
with 4 or more days this year |
7 |
周一 |
1-53 |
with a Monday in this year |
最后一列我直接把官网的英文文档内容贴过来了,因为不好翻译,哈哈。最后一列的含义要说明一下。有些周可能是跨年的,不同的mode返回的数据可能不一样。
这里我列举了几个例子,大家可以根据返回结果来理解一下。
2021-01-01是周五,2020-01-01是周三,2018-01-01是周一,2017-01-01是周日。
SELECT WEEK('2021-01-01', 0) AS c0,
WEEK('2021-01-01', 1) AS c1,
WEEK('2021-01-01', 2) AS c2,
WEEK('2021-01-01', 3) AS c3,
WEEK('2021-01-01', 4) AS c4,
WEEK('2021-01-01', 5) AS c5,
WEEK('2021-01-01', 6) AS c6,
WEEK('2021-01-01', 7) AS c7;
//返回结果如下
c0 c1 c2 c3 c4 c5 c6 c7
0 0 52 53 0 0 53 52
SELECT WEEK('2020-01-01', 0) AS c0,
WEEK('2020-01-01', 1) AS c1,
WEEK('2020-01-01', 2) AS c2,
WEEK('2020-01-01', 3) AS c3,
WEEK('2020-01-01', 4) AS c4,
WEEK('2020-01-01', 5) AS c5,
WEEK('2020-01-01', 6) AS c6,
WEEK('2020-01-01', 7) AS c7;
//返回结果如下
c0 c1 c2 c3 c4 c5 c6 c7
0 1 52 1 1 0 1 52
SELECT WEEK('2018-01-01', 0) AS c0,
WEEK('2018-01-01', 1) AS c1,
WEEK('2018-01-01', 2) AS c2,
WEEK('2018-01-01', 3) AS c3,
WEEK('2018-01-01', 4) AS c4,
WEEK('2018-01-01', 5) AS c5,
WEEK('2018-01-01', 6) AS c6,
WEEK('2018-01-01', 7) AS c7;
//返回结果如下
c0 c1 c2 c3 c4 c5 c6 c7
0 1 53 1 1 1 1 1
SELECT WEEK('2017-01-01', 0) AS c0,
WEEK('2017-01-01', 1) AS c1,
WEEK('2017-01-01', 2) AS c2,
WEEK('2017-01-01', 3) AS c3,
WEEK('2017-01-01', 4) AS c4,
WEEK('2017-01-01', 5) AS c5,
WEEK('2017-01-01', 6) AS c6,
WEEK('2017-01-01', 7) AS c7;
//返回结果如下
c0 c1 c2 c3 c4 c5 c6 c7
1 0 1 52 1 0 1 52