mysql日期时间函数

本文内容取自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。下文中提到“返回格式与上下文有关”时,即是指这种情况。

date和time的表示格式

日期(date)表示

mysql的日期表示有以下几种形式

  •  'YYYY-MM-DD' or 'YY-MM-DD' 形式。比如2000-01-01 或 00-01-01,其中年月日日期的分隔符不一定是“-”,任何标点符号都可以作为分隔符,如'2012-12-31', '2012/12/31', '2012^12^31', '2012@12@31'
  • 'YYYYMMDD' or 'YYMMDD' 形式。比如'20070523' 和 '070523' 等价于 '2007-05-23'
  • 也可以用数字表示,如19830905 and 830905,这种方式和上面一种方式差不多,只是不加引号。

日期时间表示(datetime and timestamp)

日期时间的表示有以下几种形式:

  • 字符串形式的 'YYYY-MM-DD hh:mm:ss' or 'YY-MM-DD hh:mm:ss',同样,分隔符可以是任何标点符号,如'2012-12-31 11:30:45', '2012^12^31 11+30+45', '2012/12/31 11*30*45', and '2012@12@31 11^30^45'。其中日期和时间可以用空格或T分隔,如'2012-12-31 11:30:45'或'2012-12-31T11:30:45' 
  • 字符串形式的'YYYYMMDDhhmmss' or 'YYMMDDhhmmss',如'20070523091528' 和 '070523091528'均表示'2007-05-23 09:15:28'。
  • 数字形式的YYYYMMDDhhmmss or YYMMDDhhmmss,也就是上面一种方式不加引号。如19830905132800和830905132800表示'1983-09-05 13:28:00'。

时间的表示(time)

  • 字符串形式的'D hh:mm:ss', 'hh:mm:ss', 'hh:mm', 'D hh:mm', 'D hh', or 'ss'。其中D表示天,取值范围在[0: 34],比如'0 01'表示01:00:00,而'1 01'被表示成25:00:00,也就是在1点的基础上加了24小时。
  • 字符串形式的'hhmmss','mmss','ss',比如'101010'等同于10:10:10。
  • 数字形式的hhmmss, mmss, ss,比如101010, 1111, 12。

毫秒微秒的表示

通过在秒后面加.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

标识符含义
%aAbbreviated weekday name (Sun..Sat)
星期的缩写,如Sun, Sat
%bAbbreviated month name (Jan..Dec)
月份的缩写,如Jan, Dec
%cMonth, numeric (0..12)
月的数字表示,因为mysql允许不完全的日期形式,如'2014-00-00',所以月以及下面提到的的日的数字表示都是可以为0。
%DDay of the month with English suffix (0th, 1st, 2nd, 3rd, …)
月份中的第几天,后面会加上后缀
%dDay of the month, numeric (00..31)
月份中的第几天,小于10的前面补0
%eDay of the month, numeric (0..31)
月份中的第几天,含义同上,小于10的前面不补0
%fMicroseconds (000000..999999)
微秒
%HHour (00..23)
小时(24小时制),小于10的前面补零
%hHour (01..12)
小时(12小时制),小于10的前面补零
%IHour (01..12)
小时(12小时制),同上
%iMinutes, numeric (00..59)
分钟
%jDay of year (001..366)
一年中的第几天
%kHour (0..23)
小时(24小时制),小于10的前面不补零
%lHour (1..12)
小时(12小时制),小于10的前面不补零
%MMonth name (January..December)
月份,用英文名表示,如January
%mMonth, numeric (00..12)
月份,小于10的前面补零
%pAM or PM
显示是上午(AM)还是下午(PM)
%rTime, 12-hour (hh:mm:ss followed by AM or PM)
时间,12小时制,后面加上AM或PM表示上午或下午
%SSeconds (00..59)
%sSeconds (00..59)
秒,同上
%TTime, 24-hour (hh:mm:ss)
时间,24小时制
%UWeek (00..53), where Sunday is the first day of the week; WEEK() mode 0
一年中的第几周,周日为一周的第一天
%uWeek (00..53), where Monday is the first day of the week; WEEK() mode 1
一年中的第几周,周一为一周的第一天
%VWeek (01..53), where Sunday is the first day of the week; WEEK() mode 2; used with %X
一年中的第几周,周日为一周的第一天
%vWeek (01..53), where Monday is the first day of the week; WEEK() mode 3; used with %x
一年中的第几周,周一为一周的第一天
%WWeekday name (Sunday..Saturday)
星期几,英文的表示。如Sunday
%wDay of the week (0=Sunday..6=Saturday)
星期中的第几天,0表示周日,6表示周六
%XYear for the week where Sunday is the first day of the week, numeric, four digits; used with %V
%xYear for the week, where Monday is the first day of the week, numeric, four digits; used with %v
%YYear, numeric, four digits
年,用4位数字表示
%yYear, numeric (two digits)
年,用2位数字表示
%%A literal % character
%的表示,想要表示%本身需要用两个%
%xx, 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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值