# 时间和日期格式化函数
 #### date_format(timestamp, fmt)
date_format函数将日期参数按照fmt指定的格式转换为字符串。
示例：
```
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。
 表1date_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*'                |
   
![](https://support.huaweicloud.com/sqlreference-dws/public_sys-resources/caution_3.0-zh-cn.png)
date_format支持的输出格式中，%U、%u、%V、%v、%X、%x暂不支持。
 #### time_format(time, fmt)
描述：time_format函数将日期参数按照fmt指定的格式转换为字符串。与date_format函数类似，但格式字符串只能包含小时、分钟、秒和微秒的格式说明符，如果包含其他说明符则会返回NULL值或0。
返回值类型：text
示例：
```
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)
```
![](https://support.huaweicloud.com/sqlreference-dws/public_sys-resources/notice_3.0-zh-cn.png)
time_format仅支持时间相关的格式输出（%f、%H、%h、%I、%i、%k、%l、%p、%r、%S、%s、%T），不支持日期相关格式，其他情况处理为普通字符。
 #### str_to_date(str, format)
描述：将日期/时间格式的字符串（str），按照所提供的显示格式（format）转换为日期类型的值。
返回值类型：timestamp
示例：
```
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](https://support.huaweicloud.com/sqlreference-dws/dws_06_0422.html#ZH-CN_TOPIC_0000001764675318__table17541102011)。这里仅支持"日期"格式、"日期+时间"格式的输入转换，对于仅"时间"格式的输入场景请使用str_to_time。
 #### str_to_time(str, format)
描述：将时间格式的字符串（str），按照所提供的显示格式（format）转换为时间类型的值。
返回值类型：time
示例：
```
SELECT str_to_time('09:30:17','%h:%i:%s');
 str_to_time
-------------
 09:30:17
(1 row)
```
适用于str_to_time的格式化输入的格式类型参考[表1](https://support.huaweicloud.com/sqlreference-dws/dws_06_0422.html#ZH-CN_TOPIC_0000001764675318__table17541102011)，这里仅支持"时间"格式的输入转换，对于"日期"格式、"日期+时间"格式的输入场景请使用str_to_date。
