@toc
本文问题
- 如何对日期和时间的格式进行修改?
- 如何将字符串转换为时间?
- 日期的格式有哪些?
- 时间的格式有哪些?
- 星期的格式有那些?
- 除了以上三种以外,MySQL还可以对日期和时间进行哪些部分的格式化?
更改日期时间格式
- 格式化日期
DATE_FORMAT(date,format)
- 格式化时间
TIME_FORMAT(time,format)
类似DATE_FORMAT
,但是format
中只能包括时间相关的选项,包括其他选项会导致结果为NULL
或0
如果时间的小时部分大于23,%H Hour (00..23)
和%k Hour (0..23)
可以显示具体时间,其他格式会将时间对12
取余。mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y'); -> 'Sunday October 2009' mysql> SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s'); -> '22:23:00' mysql> SELECT DATE_FORMAT('1900-10-04 22:23:00', -> '%D %y %a %d %m %b %j'); -> '4th 00 Thu 04 10 Oct 277' mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', -> '%H %k %I %r %T %S %w'); -> '22 22 10 10:23:00 PM 22:23:00 00 6' mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V'); -> '1998 52' mysql> SELECT DATE_FORMAT('2006-06-00', '%d'); -> '00' mysql> SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l'); -> '100 100 04 04 4'
- 字符串转日期
STR_TO_DATE(str,format)
# 字符串转日期 mysql> SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y'); +-------------------------------------+ | STR_TO_DATE('01,5,2013','%d,%m,%Y') | +-------------------------------------+ | 2013-05-01 | +-------------------------------------+ 1 row in set (0.00 sec) # 字符串和日期格式必须匹配,如果不匹配,会返回NULL mysql> SELECT STR_TO_DATE('a09:30:17','a%h:%i:%s'),STR_TO_DATE('a09:30:17','%h:%i:%s'); +--------------------------------------+-------------------------------------+ | STR_TO_DATE('a09:30:17','a%h:%i:%s') | STR_TO_DATE('a09:30:17','%h:%i:%s') | +--------------------------------------+-------------------------------------+ | 09:30:17 | NULL | +--------------------------------------+-------------------------------------+ 1 row in set, 1 warning (0.00 sec)
- 合成日期
MAKEDATE(year,dayofyear)
- 合成时间
MAKETIME(hour,minute,second)
mysql> select makedate(2020,155),maketime(11,15,22); +--------------------+--------------------+ | makedate(2020,155) | maketime(11,15,22) | +--------------------+--------------------+ | 2020-06-03 | 11:15:22 | +--------------------+--------------------+ 1 row in set (0.00 sec)
- 将日期转换为指定格式
GET_FORMAT({DATE|TIME|DATETIME}, {'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL'})
format
详细说明日期相关
- 年
- %Y 年份,四位数字
- %y 年份,两位数字
- 月
- %M 月份,英文全拼 (January..December)
- %m 月份,两位数值 (00..12)
- %c 月份,数值 (0..12)
- %b 月份,英文缩写 (Jan..Dec)
- 日
- 日期 %D Day of the month with English suffix (0th, 1st, 2nd, 3rd, …)
- %d 日期,两位数值 (00..31)
- %e 日期,数值 (0..31)
时间相关
- 时间
- %r 12小时制时间 (hh:mm:ss followed by AM or PM)
- %T 24小时制时间 (hh:mm:ss)
- 时
- %H Hour (00..23)
- %k Hour (0..23)
- %h Hour (01..12)
- %I Hour (01..12)
- %l Hour (1..12)
- %p AM or PM
- 分
- %i 分钟,两位数值 (00..59)
秒 - %S 秒数 (00..59)
- %s 秒数 (00..59)
- %f 微秒 (000000..999999)
星期相关
- %i 分钟,两位数值 (00..59)
- %W 星期,英文全拼 (Sunday..Saturday)
- %a 星期,英文缩写 (Sun..Sat)
- %w Day of the week (0=Sunday..6=Saturday)
周计数
%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
%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
其他
- %j Day of year (001..366)
- %% A literal % character
- %x x, for any “x” not listed above
#GET_FORMAT
详细说明
-
将日期转换为指定格式
GET_FORMAT({DATE|TIME|DATETIME}, {'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL'})
Function Call Result 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'
问题答案
- 如何对日期和时间的格式进行修改?
date_format(date,format)
,time_format(time,format)
time_format
中的格式只能包含时间格式,否则会返回NULL
或0
GET_FORMAT({DATE|TIME|DATETIME}, {'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL'})
更改成指定格式 - 如何将字符串转换为时间?
str_to_date(str,format)
- 日期的格式有哪些?
年:%Y
四位,%y
两位
月:%M
英文全拼,%m
两位数字,%c
数字,%b
英文缩写
日:%D
带英文后缀,%d
两位数字,%e
数字 - 时间的格式有哪些?
时间:%T
24小时制时间,%r
12小时制时间
时:%H,%k
24小时制,%h,%I
12小时制 两位数字,%l
12小时制数字
分:%i
两位数字
秒:%s
%S
两位数字
微秒:%f
上午/下午:%p
- 星期的格式有那些?
%w
数字(0-Sun...6-Sat
),%W
星期全拼,%a
星期缩写 - 除了以上三种以外,MySQL还可以对日期和时间进行哪些部分的格式化?
日期是本年的第几天(%j
)和第几周(%U
,%u
,%V
,%v
)
用年份+周数来表示日期(%X,%x
)