时间和日期格式化函数
date_format(timestamp, fmt)
date_format函数将日期参数按照fmt指定的格式转换为字符串。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SELECT date_format('2009-10-04 22:23:00', '%M %D %W'); date_format -------------------- October 4th Sunday (1 row) SELECT date_format('2021-02-20 08:30:45', '%Y-%m-%d %H:%i:%S'); date_format --------------------- 2021-02-20 08:30:45 (1 row) SELECT date_format('2021-02-20 18:10:15', '%r-%T'); date_format ---------------------- 06:10:15 PM-18:10:15 (1 row) |
表1显示了可以用于将日期参数格式化输出的格式类型,这些格式类型适用于函数date_format、time_format、str_to_date、str_to_time和from_unixtime。
格式 | 说明 | 取值 |
|---|---|---|
%a | 缩写星期名 | Sun...Sat |
%b | 缩写月份名 | Jan...Dec |
%c | 月份 | 0...12 |
%D | 带英文后缀的月份日期 | 0th, 1st, 2nd, 3rd, … |
%d | 一个月里的日,2位 | 00...31 |
%e | 一个月里的日 | 0...31 |
%f | 微秒 | 000000...999999 |
%H | 小时,24小时制 | 00...23 |
%h | 小时,12小时制 | 01...12 |
%I | 小时,12小时制,同%h | 01...12 |
%i | 分钟 | 00...59 |
%j | 一年里的日 | 001...366 |
%k | 小时,24小时制,同%H | 0...23 |
%l | 小时,12小时制,同%h | 1...12 |
%M | 月份名 | January...December |
%m | 月份,两位 | 00...12 |
%p | 上下午 | AM PM |
%r | 时间,12小时制 | hh::mm::ss AM/PM |
%S | 秒 | 00...59 |
%s | 秒,同%S | 00...59 |
%T | 时间,24小时制 | hh::mm::ss |
%U | 周 (00-53) 星期日是一周的第一天 | 00...53 |
%u | 周 (00-53) 星期一是一周的第一天 | 00...53 |
%V | 周 (01-53) 星期日是一周的第一天,与%X搭配使用 | 01...53 |
%v | 周 (01-53) 星期一是一周的第一天,与%x搭配使用 | 01...53 |
%W | 星期名 | Sunday...Saturday |
%w | 一周的日,周日为0 | 0...6 |
%X | 年份,其中的星期日是周的第一天,4 位,与%V搭配使用 | - |
%x | 年份,其中的星期一是周的第一天,4 位,与%v搭配使用 | - |
%Y | 年份,4位 | - |
%y | 年份,2位 | - |
%% | 字符'%' | 字符'%' |
%x | 'x',上述未列出的任意字符 | 字符'x' |

date_format支持的输出格式中,%U、%u、%V、%v、%X、%x暂不支持。
time_format(time, fmt)
描述:time_format函数将日期参数按照fmt指定的格式转换为字符串。与date_format函数类似,但格式字符串只能包含小时、分钟、秒和微秒的格式说明符,如果包含其他说明符则会返回NULL值或0。
返回值类型:text
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SELECT time_format('2009-10-04 22:23:00', '%M %D %W'); time_format -------------------- (1 row) SELECT time_format('2021-02-20 08:30:45', '%Y-%m-%d %H:%i:%S'); time_format --------------------- 0000-00-00 08:30:45 (1 row) SELECT time_format('2021-02-20 18:10:15', '%r-%T'); time_format ---------------------- 06:10:15 PM-18:10:15 (1 row) |

time_format仅支持时间相关的格式输出(%f、%H、%h、%I、%i、%k、%l、%p、%r、%S、%s、%T),不支持日期相关格式,其他情况处理为普通字符。
str_to_date(str, format)
描述:将日期/时间格式的字符串(str),按照所提供的显示格式(format)转换为日期类型的值。
返回值类型:timestamp
示例:
1 2 3 4 5 6 7 8 9 10 | SELECT str_to_date('01,5,2021','%d,%m,%Y'); str_to_date --------------------- 2021-05-01 00:00:00 (1 row) SELECT str_to_date('01,5,2021,09,30,17','%d,%m,%Y,%h,%i,%s'); str_to_date --------------------- 2021-05-01 09:30:17 (1 row) |
适用于str_to_date的格式化输入的格式类型参考表1。这里仅支持“日期”格式、“日期+时间”格式的输入转换,对于仅“时间”格式的输入场景请使用str_to_time。
str_to_time(str, format)
描述:将时间格式的字符串(str),按照所提供的显示格式(format)转换为时间类型的值。
返回值类型:time
示例:
1 2 3 4 5 | SELECT str_to_time('09:30:17','%h:%i:%s'); str_to_time ------------- 09:30:17 (1 row) |
适用于str_to_time的格式化输入的格式类型参考表1,这里仅支持“时间”格式的输入转换,对于“日期”格式、“日期+时间”格式的输入场景请使用str_to_date。

