有时,我们需要将常规的时间格式转换为特定业务场景或者特定格式的时间表示格式,那我们可以使用formatDateTime()函数来实现
简单介绍下:
formatDateTime()
解析:函数根据给定的格式字符串来格式化时间。请注意:格式字符串必须是常量表达式,例如:单个结果列不能有多种格式字符串
语法:formatDateTime(Time, Format [, Timezone])
返回值:根据指定格式返回的日期和时间
小示列:
select
formatDateTime(toDate('2020-01-04'), '%D') as date
, formatDateTime(toDate('2020-01-04'), '%F') as date_1
, formatDateTime(toDate('2021-05-13'), '%Y-%m-%d') as date_2
, formatDateTime(toDate('2021-05-13'), '%Y-%m') as year_month;
select
formatDateTime(toDateTime('2021-01-13 21:12:13'),'%Y-%m-%d %R:%S') format_1-- %R24小时HH:MM时间,相当于%H:%M
, formatDateTime(toDateTime('2021-01-13 21:12:13'),'%Y-%m-%d %H:%M:%S') format_2-- %H 24小时格式(00-23)
, formatDateTime(toDateTime('2021-01-13 21:12:13'),'%Y-%m-%d %I:%M:%S') format_3-- %I 小时12h格式(01-12)
, formatDateTime(toDateTime('2021-01-13 21:12:13'),'%Y-%m-%d %p %I:%M:%S') format_4; -- %p 指定AM或PM
支持的格式修饰符如下:
修饰符 | 描述 | 示例 |
---|---|---|
%C | 年除以100并截断为整数(00-99) | 20 |
%d | 月中的一天,零填充(01-31) | 02 |
%D | 短MM/DD/YY日期,相当于%m/%d/%y | 01/02/2018 |
%e | 月中的一天,空格填充(1-31) | 2 |
%F | 短YYYY-MM-DD日期,相当于%Y-%m-%d | 2018-01-02 |
%G | ISO周号的四位数年份格式, 从基于周的年份由ISO 8601定义 标准计算得出,通常仅对%V有用 | 2018 |
%g | 两位数的年份格式,与ISO 8601一致,四位数表示法的缩写 | 18 |
%H | 24小时格式(00-23) | 22 |
%I | 小时12h格式(01-12) | 10 |
%j | 一年(001-366) | 002 |
%m | 月份为十进制数(01-12) | 01 |
%M | 分钟(00-59) | 33 |
%n | 换行符(") | |
%p | AM或PM指定 | PM |
%R | 24小时HH:MM时间,相当于%H:%M | 22:33 |
%S | 分钟(00-59) | 44 |
%t | 水平制表符(’) | |
%T | ISO8601时间格式(HH:MM:SS),相当于%H:%M:%S | 22:33:44 |
%u | ISO8601平日as编号,星期一为1(1-7) | 2 |
%V | ISO8601周编号(01-53) | 01 |
%w | 周日为十进制数,周日为0(0-6) | 2 |
%y | 年份,最后两位数字(00-99) | 18 |
%Y | 年 | 2018 |
%% | %符号 | % |
参考:https://clickhouse.tech/docs/en/sql-reference/functions/date-time-functions/#formatdatetime