更新时间:2026-01-22 GMT+08:00
分享

时间和日期格式化函数

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。

表1 date_format支持的输出格式

格式

说明

取值

%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。

相关文档