用于处理日期和时间的函数
本节中的大多数函数接受一个可选的时区参数,例如 Europe/Amsterdam。在这种情况下,将使用指定的时区,而不是默认的本地时区。
示例
UTCTimestamp
引入版本:v22.11
在查询分析阶段返回当前日期和时间。该函数是一个常量表达式。
此函数返回的结果与 now('UTC') 相同。它仅为兼容 MySQL 而添加。推荐使用 now。
语法
别名: UTC_timestamp
参数
- 无。
返回值
返回在解析查询时的当前日期和时间。DateTime
示例
获取当前 UTC 时间戳
YYYYMMDDToDate
引入于:v23.9
将一个包含年份、月份和日期数字的数值转换为 Date。
此函数是函数 toYYYYMMDD() 的逆操作。
如果输入未表示为有效的 Date 值,则其输出是未定义的。
语法
参数
返回值
从提供的参数构造并返回一个 Date 值 Date
示例
示例
YYYYMMDDToDate32
引入于:v23.9
将一个包含年份、月份和日期数字的数值转换为 Date32。
该函数是函数 toYYYYMMDD() 的逆操作。
如果输入值不能编码为有效的 Date32 值,则输出结果未定义。
语法
参数
返回值
根据提供的参数返回一个 Date32 类型的值 Date32
示例
示例
YYYYMMDDhhmmssToDateTime
引入于:v23.9
将一个包含年、月、日、时、分、秒的数字转换为 DateTime。
此函数执行的转换与函数 toYYYYMMDDhhmmss() 相反。
如果输入未表示有效的 DateTime 值,则输出结果未定义。
语法
参数
返回值
根据提供的参数返回一个 DateTime 类型的值 DateTime
示例
示例
YYYYMMDDhhmmssToDateTime64
自 v23.9 起提供
将包含年、月、日、时、分、秒的数字转换为 DateTime64。
该函数与 toYYYYMMDDhhmmss() 的功能相反。
如果输入未表示有效的 DateTime64 值,则输出未定义。
语法
参数
YYYYMMDDhhmmss— 包含年份、月份、日期、小时、分钟和秒的数值。(U)Int*或Float*或Decimalprecision— 小数部分的精度(0-9)。UInt8timezone— 时区名称。String
返回值
根据提供的参数返回一个 DateTime64 值。DateTime64
示例
示例
addDate
自 v23.9 引入
将时间间隔添加到指定的日期、日期时间,或其字符串形式的日期、日期时间。 如果相加的结果超出该数据类型的取值范围,则结果未定义。
语法
参数
datetime— 需要加上interval的日期或日期时间值。Date或Date32或DateTime或DateTime64或Stringinterval— 要添加的时间间隔。Interval
返回值
返回在 datetime 上加上 interval 后得到的日期或日期时间值。Date 或 Date32 或 DateTime 或 DateTime64
示例
为日期加上时间间隔
addDays
引入版本:v1.1
将指定的天数添加到日期、日期时间,或其字符串编码形式的日期 / 日期时间值中。
语法
参数
datetime— 要添加指定天数的日期或日期时间值。可以是Date、Date32、DateTime、DateTime64或Stringnum— 要添加的天数。(U)Int*或Float*
返回值
返回 datetime 加上 num 天后的结果。Date 或 Date32 或 DateTime 或 DateTime64
示例
为不同日期类型添加天数
使用另一种 INTERVAL 语法
addHours
自 v1.1 引入
将指定数量的小时数加到日期、日期时间或其字符串形式的日期/日期时间上。
语法
参数
datetime— 要添加指定小时数的日期或日期时间值。Date或Date32或DateTime或DateTime64或Stringnum— 要添加的小时数。(U)Int*或Float*
返回值
返回 datetime 加上 num 小时,类型为 DateTime 或 DateTime64(3)
示例
为不同日期类型增加小时数
使用另一种 INTERVAL 语法
addInterval
引入版本:v22.11
将一个 interval 添加到另一个 interval,或添加到由多个 interval 组成的元组上。
相同类型的 interval 会被合并为单个 interval。例如,如果传入 toIntervalDay(1) 和 toIntervalDay(2),则结果为 (3) 而不是 (1,1)。
语法
参数
interval_1— 第一个时间间隔或时间间隔元组。Interval或Tuple(Interval)interval_2— 要相加的第二个时间间隔。Interval
返回值
返回时间间隔元组 Tuple(Interval)
示例
时间间隔相加
addMicroseconds
引入于:v22.6
将指定数量的微秒添加到一个日期时间值,或一个以字符串编码的日期时间值。
语法
参数
datetime— 要在其上添加指定数量微秒的日期和时间值。类型为DateTime、DateTime64或Stringnum— 要添加的微秒数。类型为(U)Int*或Float*
返回值
返回一个 DateTime64 值,等于 date_time 加上 num 微秒。
示例
为不同的日期时间类型添加微秒
使用其他 INTERVAL 语法
addMilliseconds
引入于:v22.6
将指定数量的毫秒添加到日期时间值或其字符串编码形式。
语法
参数
datetime— 要在其上添加指定毫秒数的日期时间值。DateTime或DateTime64或Stringnum— 要添加的毫秒数。(U)Int*或Float*
返回值
返回 datetime 加上 num 毫秒后的值,类型为 DateTime64
示例
为不同的日期时间类型添加毫秒数
使用另一种 INTERVAL 语法
addMinutes
引入版本:v1.1
将指定的分钟数添加到日期、日期时间,或其字符串编码形式的日期/日期时间值上。
语法
参数
datetime— 需要添加指定分钟数的日期或日期时间值。Date或Date32或DateTime或DateTime64或Stringnum— 要添加的分钟数。(U)Int*或Float*
返回值
返回在 datetime 的基础上加上 num 分钟后的结果,类型为 DateTime 或 DateTime64(3)
示例
为不同日期类型增加分钟数
使用另一种 INTERVAL 语法
addMonths
引入于:v1.1
将指定数量的月份添加到日期、日期时间,或其字符串编码形式的日期或日期时间上。
语法
参数
datetime— 要添加指定月数的日期或日期时间值。Date或Date32或DateTime或DateTime64或Stringnum— 要添加的月份数量。(U)Int*或Float*
返回值
返回在 datetime 基础上加上 num 个月后的结果。类型为 Date 或 Date32 或 DateTime 或 DateTime64
示例
为不同日期类型添加月份
使用另一种 INTERVAL 语法
addNanoseconds
自 v22.6 版本引入
将指定数量的纳秒添加到日期时间值或其字符串编码的日期时间值中。
语法
参数
datetime— 要添加指定纳秒数的日期时间值。DateTime或DateTime64或Stringnum— 要添加的纳秒数。(U)Int*或Float*
返回值
返回 datetime 加上 num 纳秒后的结果,类型为 DateTime64
示例
为不同日期时间类型添加纳秒
使用另一种 INTERVAL 语法
addQuarters
自 v20.1 版本引入
向日期、日期时间或其字符串形式添加指定数量的季度。
语法
参数
datetime— 要添加指定季度数的日期或带时间的日期。类型为Date、Date32、DateTime、DateTime64或Stringnum— 要添加的季度数。类型为(U)Int*或Float*
返回值
返回在 datetime 基础上加上 num 个季度后的值,类型为 Date、Date32、DateTime 或 DateTime64
示例
为不同日期类型添加季度数
使用另一种 INTERVAL 语法
addSeconds
引入于:v1.1
向日期、日期时间或其字符串表示形式添加指定数量的秒。
语法
参数
datetime— 要在其上添加指定秒数的日期或日期时间值。Date或Date32或DateTime或DateTime64或Stringnum— 要添加的秒数。(U)Int*或Float*
返回值
返回 datetime 加上 num 秒后的结果,类型为 DateTime 或 DateTime64(3)
示例
对不同日期类型添加秒数
使用备用 INTERVAL 语法
addTupleOfIntervals
引入于:v22.11
依次将一个间隔元组加到日期或日期时间值上。
语法
参数
datetime— 要向其添加时间间隔的日期或带时间的日期。Date或Date32或DateTime或DateTime64intervals— 要添加到datetime的时间间隔元组。Tuple(Interval)
返回值
返回在 date 上加上 intervals 后的值,其类型为 Date 或 Date32 或 DateTime 或 DateTime64
示例
向日期添加时间间隔元组
addWeeks
引入版本:v1.1
将指定的周数添加到 date、date with time 或其字符串形式的 date / date with time 值上。
语法
参数
datetime— 要向其添加指定周数的日期或日期时间值。类型为Date或Date32或DateTime或DateTime64或Stringnum— 要添加的周数。类型为(U)Int*或Float*
返回值
返回在 datetime 上加上 num 周后的结果,类型为 Date 或 Date32 或 DateTime 或 DateTime64
示例
为不同日期类型增加周数
使用另一种 INTERVAL 语法
addYears
自 v1.1 引入
为日期、带时间的日期,或其字符串编码形式添加指定数量的年份。
语法
参数
datetime— 需要增加指定年数的日期或日期时间。Date或Date32或DateTime或DateTime64或Stringnum— 要增加的年数。(U)Int*或Float*
返回值
返回在 datetime 的基础上增加 num 年后的结果。Date 或 Date32 或 DateTime 或 DateTime64
示例
为不同日期类型增加年份
使用另一种 INTERVAL 语法
age
引入于:v23.1
返回 startdate 与 enddate 之间差值在指定单位下的分量。
该差值使用 1 纳秒精度进行计算。
例如,2021-12-29 与 2022-01-01 之间的差值,对“天”这一单位来说是 3 天, 对“月”这一单位来说是 0 个月,对“年”这一单位来说是 0 年。
作为 age 的替代方案,请参阅函数 dateDiff。
语法
参数
unit— 结果的时间间隔单位类型。
| Unit | Possible values |
|---|---|
| nanosecond | nanosecond, nanoseconds, ns |
| microsecond | microsecond, microseconds, us, u |
| millisecond | millisecond, milliseconds, ms |
| second | second, seconds, ss, s |
| minute | minute, minutes, mi, n |
| hour | hour, hours, hh, h |
| day | day, days, dd, d |
| week | week, weeks, wk, ww |
| month | month, months, mm, m |
| quarter | quarter, quarters, qq, q |
| year | year, years, yyyy, yy |
startdate— 要减去的第一个时间值(减数)。Date或Date32或DateTime或DateTime64enddate— 要从中减去的第二个时间值(被减数)。Date或Date32或DateTime或DateTime64timezone— 可选。时区名称。如果指定,则同时应用于 startdate 和 enddate。如果未指定,则使用 startdate 和 enddate 自身的时区。如果二者时区不同,则结果不确定。String
返回值
返回 enddate 与 startdate 之间的差值,单位为 unit。Int32
示例
按小时计算年龄
按不同单位计算年龄
changeDay
引入版本:v24.7
更改日期或日期时间值中的“日”部分。
语法
参数
date_or_datetime— 要修改的值。Date或Date32或DateTime或DateTime64value— 新的值。(U)Int*
返回值
返回一个与 date_or_datetime 类型相同、但日字段已被修改的值。Date 或 Date32 或 DateTime 或 DateTime64
示例
用法示例
changeHour
引入版本:v24.7
更改日期或日期时间值的小时部分。
语法
参数
date_or_datetime— 要修改的值。Date或Date32或DateTime或DateTime64value— 新的数值。(U)Int*
返回值
返回与 date_or_datetime 类型相同的值,但其中的小时部分已被修改。DateTime 或 DateTime64
示例
用法示例
changeMinute
引入于:v24.7
更改 date 或 date time 的分钟部分。
语法
参数
date_or_datetime— 要修改的值。Date或Date32或DateTime或DateTime64value— 新的值。(U)Int*
返回值
返回与 date_or_datetime 类型相同、但其分钟部分已被修改的值。DateTime 或 DateTime64
示例
使用示例
changeMonth
引入版本:v24.7
修改日期或日期时间值的月份部分。
语法
参数
date_or_datetime— 待修改的值。Date或Date32或DateTime或DateTime64value— 新值。(U)Int*
返回值
返回与 date_or_datetime 类型相同但秒组件已修改的值。Date 或 Date32 或 DateTime 或 DateTime64
示例
用法示例
changeSecond
引入版本:v24.7
更改日期或日期时间值中的秒部分。
语法
参数
date_or_datetime— 要更改的值。Date或Date32或DateTime或DateTime64value— 新值。(U)Int*
返回值
返回与 date_or_datetime 类型相同但秒数部分已被修改的值。DateTime 或 DateTime64
示例
使用示例
changeYear
引入于:v24.7
修改日期或日期时间值的年份部分。
语法
参数
date_or_datetime— 要更改的值。Date或Date32或DateTime或DateTime64value— 新的值。(U)Int*
返回值
返回与 date_or_datetime 类型相同但年份部分已被修改的值。Date 或 Date32 或 DateTime 或 DateTime64
示例
使用示例
dateDiff
引入版本:v23.4
返回在 startdate 和 enddate 之间跨越的指定 unit 边界的次数。
差值是使用相对单位进行计算的。例如,2021-12-29 和 2022-01-01 之间的差值,对于单位 day 是 3 天
(参见 toRelativeDayNum),对于单位 month 是 1 个月(参见 toRelativeMonthNum),对于单位 year 是 1 年
(参见 toRelativeYearNum)。
如果指定的单位为 week,则 dateDiff 认为每周从星期一开始。
请注意,此行为与函数 toWeek() 不同,后者默认认为每周从星期日开始。
作为 dateDiff 的替代方案,请参见函数 age。
语法
别名: timestampDiff, TIMESTAMP_DIFF, DATE_DIFF, date_diff, timestamp_diff
参数
unit— 结果的时间间隔单位类型。
| 单位 | 可用取值 |
|---|---|
| nanosecond | nanosecond, nanoseconds, ns |
| microsecond | microsecond, microseconds, us, u |
| millisecond | millisecond, milliseconds, ms |
| second | second, seconds, ss, s |
| minute | minute, minutes, mi, n |
| hour | hour, hours, hh, h |
| day | day, days, dd, d |
| week | week, weeks, wk, ww |
| month | month, months, mm, m |
| quarter | quarter, quarters, qq, q |
| year | year, years, yyyy, yy |
startdate— 第一个参与运算的时间值(被减数)。Date或Date32或DateTime或DateTime64enddate— 第二个参与运算的时间值(减数)。Date或Date32或DateTime或DateTime64timezone— 可选。时区名称。如果指定,则同时应用于startdate和enddate。如果未指定,则使用startdate和enddate自身的时区。如果二者时区不同,则结果未定义。String
返回值
返回以 unit 为单位表示的 enddate 与 startdate 之间的差值。Int64
示例
按小时计算日期差值
按不同单位计算日期差
dateName
自 v21.7 起引入
返回日期中指定的部分。
可选值:
- 'year'
- 'quarter'
- 'month'
- 'week'
- 'dayofyear'
- 'day'
- 'weekday'
- 'hour'
- 'minute'
- 'second'
语法
参数
date_part— 要提取的日期组成部分。Stringdatetime— 日期或日期时间值。Date或Date32或DateTime或DateTime64timezone— 可选。时区。String
返回值
返回日期的指定部分。String
示例
提取不同的日期组成部分
dateTrunc
自 v20.8 版本引入
将日期和时间值截断到指定的日期粒度。
语法
别名: DATE_TRUNC
参数
unit— 要对结果进行截断的时间间隔类型。可选值:nanosecond(仅限 DateTime64)、microsecond(仅限 DateTime64)、millisecond(仅限 DateTime64)、second、minute、hour、day、week、month、quarter、year。Stringdatetime— 日期和时间。Date或Date32或DateTime或DateTime64timezone— 可选。用于返回值的时区名称。如果未指定,函数会使用datetime参数的时区。String
返回值
返回被截断后的日期和时间值。
| Unit 参数 | datetime 参数 | 返回类型 |
|---|---|---|
| Year, Quarter, Month, Week | Date32 或 DateTime64 或 Date 或 DateTime | Date32 或 Date |
| Day, Hour, Minute, Second | Date32、DateTime64、Date 或 DateTime | DateTime64 或 DateTime |
| Millisecond, Microsecond, | 任意 | DateTime64 |
| Nanosecond | 小数位精度为 3、6 或 9 |
示例
在不指定时区的情况下进行截断
按指定时区截断
formatDateTime
引入版本:v1.1
根据给定的格式字符串格式化日期或日期时间。format 是常量表达式,因此无法为同一个结果列使用多种格式。
formatDateTime 使用 MySQL 日期时间格式风格,参见 MySQL 文档。
该函数的反向操作是 parseDateTime。
通过使用替换字段,可以为结果字符串定义一个模式。
下表中的示例列展示了 2018-01-02 22:33:44 的格式化结果。
替换字段:
| Placeholder | Description | Example |
|---|---|---|
| %a | 缩写的星期名称(Mon-Sun) | Mon |
| %b | 缩写的月份名称(Jan-Dec) | Jan |
| %c | 以整数表示的月份(01-12) | 01 |
| %C | 年份除以 100 并截断为整数(00-99) | 20 |
| %d | 零填充的日期(01-31) | 02 |
| %D | 短格式 MM/DD/YY 日期,等价于 %m/%d/%y | 01/02/18 |
| %e | 以空格填充的日期(1-31) | 2 |
| %f | 秒的小数部分 | 123456 |
| %F | 短格式 YYYY-MM-DD 日期,等价于 %Y-%m-%d | 2018-01-02 |
| %g | 与 ISO 8601 对齐的两位数年份格式 | 18 |
| %G | 用于 ISO 周编号的四位数年份格式 | 2018 |
| %h | 12 小时制的小时(01-12) | 09 |
| %H | 24 小时制的小时(00-23) | 22 |
| %i | 分钟(00-59) | 33 |
| %I | 12 小时制的小时(01-12) | 10 |
| %j | 一年中的第几天(001-366) | 002 |
| %k | 24 小时制的小时(00-23) | 14 |
| %l | 12 小时制的小时(01-12) | 09 |
| %m | 以整数表示的月份(01-12) | 01 |
| %M | 完整的月份名称(January-December) | January |
| %n | 换行符 | |
| %p | AM 或 PM 标记 | PM |
| %Q | 季度(1-4) | 1 |
| %r | 12 小时制 HH:MM AM/PM 时间,等价于 %h:%i %p | 10:30 PM |
| %R | 24 小时制 HH:MM 时间,等价于 %H:%i | 22:33 |
| %s | 秒(00-59) | 44 |
| %S | 秒(00-59) | 44 |
| %t | 水平制表符 | |
| %T | ISO 8601 时间格式(HH:MM:SS),等价于 %H:%i:%S | 22:33:44 |
| %u | 以星期一为 1 的 ISO 8601 星期几编号(1-7) | 2 |
| %V | ISO 8601 周编号(01-53) | 01 |
| %w | 以星期日为 0 的星期几整数编号(0-6) | 2 |
| %W | 完整的星期名称(Monday-Sunday) | Monday |
| %y | 年份的后两位数字(00-99) | 18 |
| %Y | 年份 | 2018 |
| %z | 与 UTC 的时差,形式为 +HHMM 或 -HHMM | -0500 |
| %% | 一个 % 符号 | % |
- 在 ClickHouse 版本低于 v23.4 时,如果被格式化的值是 Date、Date32 或 DateTime(这些类型没有小数秒),或者是精度为 0 的 DateTime64,
%f会打印单个零(0)。 - 在 ClickHouse 版本低于 v25.1 时,
%f打印的位数与 DateTime64 的 scale 指定的位数相同,而不是固定为 6 位。 - 在 ClickHouse 版本低于 v23.4 时,
%M打印的是分钟(00-59),而不是完整的月份名称(January-December)。
语法
别名:DATE_FORMAT
参数
datetime— 要进行格式化的日期或日期时间值。Date或Date32或DateTime或DateTime64format— 包含占位符字段的格式字符串。Stringtimezone— 可选。用于格式化时间的时区名称。String
Returned value
根据指定的格式返回日期和时间值。String
Examples
使用年份占位符格式化日期
格式化带小数秒的 DateTime64
按时区格式化
formatDateTimeInJodaSyntax
引入版本:v20.1
与 formatDateTime 类似,但它使用 Joda 风格而非 MySQL 风格来格式化日期时间。请参考 Joda Time 文档。
此函数的反向操作为 parseDateTimeInJodaSyntax。
通过使用替换字段,你可以为结果字符串定义一个模式。
替换字段:
| Placeholder | Description | Presentation | Examples |
|---|---|---|---|
| G | 纪元 | text | AD |
| C | 世纪(纪元,>=0) | number | 20 |
| Y | 纪元中的年份(>=0) | year | 1996 |
| x | weekyear(尚不支持) | year | 1996 |
| w | weekyear 中的周(尚不支持) | number | 27 |
| e | 一周中的第几天 | number | 2 |
| E | 一周中的第几天 | text | Tuesday; Tue |
| y | 年 | year | 1996 |
| D | 一年中的第几天 | number | 189 |
| M | 一年中的月份 | month | July; Jul; 07 |
| d | 一个月中的第几天 | number | 10 |
| a | 上下午 | text | PM |
| K | 上下午中的小时 (0~11) | number | 0 |
| h | 上下午的时钟小时 (1~12) | number | 12 |
| H | 一天中的小时 (0~23) | number | 0 |
| k | 一天的时钟小时 (1~24) | number | 24 |
| m | 一小时中的分钟 | number | 30 |
| s | 一分钟中的秒 | number | 55 |
| S | 秒的小数部分 | number | 978 |
| z | 时区 | text | Eastern Standard Time; EST |
| Z | 时区偏移 | zone | -0800; -0812 |
| ' | 文本转义符 | delimiter | |
| '' | 单引号 | literal | ' |
语法
参数
datetime— 要格式化的日期或日期时间。DateTime或Date或Date32或DateTime64format— 带有 Joda 风格占位字段的格式字符串。Stringtimezone— 可选。用于格式化时间的时区名称。String
返回值
根据指定格式返回日期和时间值。String
示例
使用 Joda 语法格式化 datetime
fromDaysSinceYearZero
引入版本:v23.11
对于给定的自公元 0000 年 1 月 1 日以来经过的天数,返回该天在 ISO 8601 定义的前推(proleptic)格里高利历中的对应日期。
该计算方式与 MySQL 的 FROM_DAYS() 函数相同。如果结果无法在 Date 类型的取值范围内表示,则其结果未定义。
语法
别名: FROM_DAYS
参数
days— 自公元 0 年以来经过的天数。UInt32
返回值
返回与自公元 0 年以来经过的天数相对应的日期。Date
示例
将自公元 0 年以来的天数转换为日期
fromDaysSinceYearZero32
引入于:v23.11
对于给定的自公元 0000 年 1 月 1 日起算的天数,返回在ISO 8601 定义的前推格里高利历(proleptic Gregorian calendar)中的对应日期。
其计算方式与 MySQL 的 FROM_DAYS() 函数相同。如果结果无法在 Date32 类型的取值范围内表示,则结果未定义。
语法
参数
days— 自公元 0 年起经过的天数。UInt32
返回值
返回与自公元 0 年起经过的该天数对应的日期。Date32
示例
将自公元 0 年起经过的天数转换为日期
fromModifiedJulianDay
引入于:v21.1
将一个修正儒略日数转换为前推格里高利历文本形式的日期字符串 YYYY-MM-DD。此函数支持的日数范围为从 -678941 到 2973483(分别表示 0000-01-01 和 9999-12-31)。如果日数超出支持范围,将抛出异常。
语法
参数
day— 修正儒略日数。(U)Int*
返回值
以文本形式返回日期。String
示例
将修正儒略日数转换为日期
fromModifiedJulianDayOrNull
自 v21.1 引入。
与 fromModifiedJulianDay() 类似,但不会抛出异常,而是返回 NULL。
语法
参数
day— Modified Julian Day 数值。(U)Int*
返回值
对于有效的 day 参数,返回文本形式的日期,否则返回 null。Nullable(String)
示例
将 Modified Julian Day 转换为日期并进行 null 处理
fromUTCTimestamp
自 v22.1 起引入
将 UTC 时区的日期或日期时间值转换为指定时区的日期或日期时间值。此函数主要用于与 Apache Spark 和类似框架的兼容性。
语法
别名: from_utc_timestamp
参数
datetime— 一个日期或带时间的常量值,或一个表达式。DateTime或DateTime64time_zone— 表示时区的String类型常量值或表达式。String
返回值
返回指定时区下的 DateTime/DateTime64 值。DateTime 或 DateTime64
示例
将 UTC 时间转换为指定时区的时间
fromUnixTimestamp
引入于:v20.8
此函数将 Unix 时间戳转换为日历日期和一天中的时间。
它可以以两种方式调用:
- 当给定单个
Integer类型的参数时,返回一个DateTime类型的值,即其行为类似于toDateTime。 - 当给定两个或三个参数时,其中第一个参数是
Integer、Date、Date32、DateTime或DateTime64类型的值,第二个参数是常量格式字符串,第三个参数是可选的常量时区字符串时,函数返回String类型的值,即其行为类似于formatDateTime。 在这种情况下,使用的是 MySQL 的 datetime 格式样式。
语法
别名: FROM_UNIXTIME
参数
timestamp— Unix 时间戳或日期 / 日期时间值。(U)Int*或Date或Date32或DateTime或DateTime64format— 可选。用于输出格式的常量格式字符串。Stringtimezone— 可选。表示时区的常量字符串。String
返回值
使用一个参数调用时,返回该时间戳对应的 DateTime;使用两个或三个参数调用时,返回 String。DateTime 或 String
示例
将 Unix 时间戳转换为 DateTime
使用指定格式转换 Unix 时间戳
fromUnixTimestampInJodaSyntax
引入于:v23.1
此函数将 Unix 时间戳转换为日历日期和当天时间。
它可以通过两种方式调用:
当只提供一个 Integer 类型的参数时,它返回 DateTime 类型的值,即其行为类似于 toDateTime。
当提供两个或三个参数时,如果第一个参数是 Integer、Date、Date32、DateTime 或 DateTime64 类型的值,第二个参数是常量格式字符串,第三个参数是可选的常量时区字符串,则函数返回 String 类型的值,即其行为类似于 formatDateTimeInJodaSyntax。在这种情况下,会使用 Joda 日期时间格式样式。
语法
参数
timestamp— Unix 时间戳或日期/时间值。(U)Int*或Date或Date32或DateTime或DateTime64format— 可选。使用 Joda 语法指定输出格式的常量格式字符串。Stringtimezone— 可选。常量时区字符串。String
返回值
使用一个参数调用时返回日期时间值,使用两个或三个参数调用时返回字符串。} DateTime 或 String
示例
使用 Joda 格式转换 Unix 时间戳
makeDate
引入版本:v22.6
根据以下任一形式创建 Date:
- 年、月和日
- 年和一年中的第几天
语法
参数
year— 年份。(U)Int*或Float*或Decimalmonth— 月份(1-12)。(U)Int*或Float*或Decimalday— 月中的日(1-31)。(U)Int*或Float*或Decimalday_of_year— 年中的第几天(1-365)。(U)Int*或Float*或Decimal
返回值
返回由给定参数构造的 Date 值 Date
示例
根据年、月、日构造 Date
根据年份和一年中的第几天构造日期
makeDate32
自 v22.6 引入
根据以下两种形式之一创建 Date32:
- 年、月和日
- 年和一年中的第几天
语法
参数
year— 年份。(U)Int*或Float*或Decimalmonth— 月份 (1-12)。(U)Int*或Float*或Decimalday— 日期 (1-31)。(U)Int*或Float*或Decimalday_of_year— 一年中的第几天 (1-365)。(U)Int*或Float*或Decimal
返回值
返回由给定参数构造的 Date32 值。参见 Date32
示例
从年、月、日构造 Date32
根据年份和一年中的第几天构造 Date32
makeDateTime
引入于:v22.6
根据年、月、日、时、分和秒创建一个 DateTime,可选传入时区。
语法
参数
year— 年份。(U)Int*或Float*或Decimalmonth— 月份 (1-12)。(U)Int*或Float*或Decimalday— 日期 (1-31)。(U)Int*或Float*或Decimalhour— 小时 (0-23)。(U)Int*或Float*或Decimalminute— 分钟 (0-59)。(U)Int*或Float*或Decimalsecond— 秒 (0-59)。(U)Int*或Float*或Decimaltimezone— 时区名称。String
返回值
返回由给定参数构造的 DateTime 值。
示例
由 year、month、day、hour、minute、second 构造 DateTime
makeDateTime64
引入于:v22.6
根据 year、month、day、hour、minute、second 创建一个 DateTime64 值,可选参数包括 fraction、precision 和 timezone。
语法
参数
year— 年份。(U)Int*或Float*或Decimalmonth— 月份 (1-12)。(U)Int*或Float*或Decimalday— 日 (1-31)。(U)Int*或Float*或Decimalhour— 小时 (0-23)。(U)Int*或Float*或Decimalminute— 分钟 (0-59)。(U)Int*或Float*或Decimalsecond— 秒 (0-59)。(U)Int*或Float*或Decimalfraction— 秒的小数部分。(U)Int*或Float*或Decimalprecision— 小数部分的精度 (0-9)。UInt8timezone— 时区名称。String
返回值
返回由给定参数构造的 DateTime64 类型的值。DateTime64
示例
从 year、month、day、hour、minute、second 构造 DateTime64
monthName
引入版本:v22.1
从日期或日期时间值中返回表示月份名称的字符串。
语法
参数
datetime— 日期或日期时间值。Date或Date32或DateTime或DateTime64
返回值
返回月份名称。String
示例
从日期获取月份名称
now
自 v1.1 版本引入。
返回在查询解析阶段的当前日期和时间。该函数是一个常量表达式。
语法
别名: current_timestamp
参数
timezone— 可选。返回值所使用的时区名称。String
返回值
返回当前日期和时间。DateTime
示例
不指定时区的查询
在指定时区进行查询
now64
引入于:v20.1
在查询分析阶段返回当前日期和时间,精度可达亚秒级。该函数为常量表达式。
语法
参数
scale— 可选。刻度大小(精度):10^-scale 秒。有效范围:[0 : 9]。通常使用的值为 3(默认,毫秒)、6(微秒)、9(纳秒)。UInt8timezone— 可选。返回值所使用的时区名称。String
返回值
返回具有亚秒级精度的当前日期和时间。DateTime64
示例
使用默认精度和自定义精度的查询
nowInBlock
引入自:v22.8
返回在处理每个数据块时的当前日期和时间。与函数 now 相比,它不是常量表达式,对于长时间运行的查询,在不同数据块中返回的值会不同。
在长时间运行的 INSERT SELECT 查询中,适合使用此函数来生成当前时间。
语法
参数
timezone— 可选。返回值所使用的时区名称。String
返回值
返回在处理每个数据块时的当前日期和时间。DateTime
示例
与 now() 函数的区别
nowInBlock64
引入于:v25.8
在处理每个数据块时,返回当时的当前日期和时间,单位为毫秒。与函数 now64 相比,它不是常量表达式,对于长时间运行的查询,在不同数据块中返回的值会不同。
在长时间运行的 INSERT SELECT 查询中,适合使用此函数生成当前时间。
语法
参数
scale— 可选。刻度大小(精度):10^-precision 秒。有效范围:[0 : 9]。通常使用 3(默认,毫秒)、6(微秒)、9(纳秒)。UInt8timezone— 可选。返回值使用的时区名称。String
返回值
返回在处理每个数据块时的当前日期和时间,具有子秒级精度。DateTime64
示例
与 now64() 函数的差异
serverTimezone
自 v23.6 起引入
返回服务器的时区,即 timezone 设置的值。
如果在分布式表的上下文中执行该函数,则会生成一个普通列,其值对应各个分片的时区。否则,它会生成一个常量值。
语法
别名:serverTimeZone
参数
- 无。
返回值
返回服务器的时区,类型为String。
示例
用法示例
subDate
引入版本:v23.9
从给定的日期、日期时间或其字符串表示中减去一个时间间隔。 如果运算结果超出了该数据类型的取值范围,则结果未定义。
语法
参数
datetime— 要从中减去interval的日期或日期时间值。Date或Date32或DateTime或DateTime64interval— 要减去的时间间隔。Interval
返回值
返回通过从 datetime 中减去 interval 得到的日期或日期时间值。Date 或 Date32 或 DateTime 或 DateTime64
示例
从日期中减去时间间隔
subtractDays
引入版本:v1.1
从日期、日期时间或其字符串表示中减去指定天数。
语法
参数
datetime— 要从中减去指定天数的日期或日期时间值。Date或Date32或DateTime或DateTime64或Stringnum— 要减去的天数。(U)Int*或Float*
返回值
返回 datetime 减去 num 天后的结果。类型为 Date 或 Date32 或 DateTime 或 DateTime64
示例
对不同日期类型减去天数
使用另一种 INTERVAL 语法
subtractHours
自 v1.1 引入
从日期、日期时间或其字符串形式中减去指定的小时数。
语法
参数
datetime— 要从中减去指定小时数的日期或日期时间类型值。Date或Date32或DateTime或DateTime64或Stringnum— 要减去的小时数。(U)Int*或Float*
返回值
返回 datetime 减去 num 小时后的值,类型为 DateTime 或 DateTime64(3)。
示例
从不同日期类型中减去小时数
使用另一种 INTERVAL 语法
subtractInterval
引入于:v22.11
将一个取负的 interval 加到另一个 interval 或由多个 interval 组成的元组上。
注意:相同类型的 interval 会被合并为一个单一的 interval。例如,如果传入 toIntervalDay(2) 和 toIntervalDay(1),则结果为 (1) 而不是 (2,1)。
语法
参数
interval_1— 第一个区间,或区间元组。Interval或Tuple(Interval)interval_2— 需要取负的第二个区间。Interval
返回值
返回由区间组成的元组 Tuple(T)
示例
区间相减
subtractMicroseconds
引入于:v22.6
从带时间的日期或其字符串编码形式中减去指定数量的微秒。
语法
参数
datetime— 要从中减去指定数量微秒的日期时间值。DateTime或DateTime64或Stringnum— 要减去的微秒数。(U)Int*或Float*
返回值
返回 datetime 减去 num 微秒后的结果,类型为 DateTime64
示例
从不同的日期时间类型中减去微秒
使用另一种 INTERVAL 语法
subtractMilliseconds
自 v22.6 版本引入
从日期时间值或字符串形式的日期时间中减去指定的毫秒数。
语法
参数
datetime— 要从中减去指定毫秒数的日期时间值。DateTime或DateTime64或Stringnum— 要减去的毫秒数。(U)Int*或Float*
返回值
返回 datetime 减去 num 毫秒后的值,类型为 DateTime64
示例
从不同日期时间类型中减去毫秒数
使用另一种 INTERVAL 语法
subtractMinutes
引入于:v1.1
从日期、日期时间或其字符串表示中减去指定数量的分钟。
语法
参数
datetime— 要从中减去指定分钟数的日期或日期时间值。Date或Date32或DateTime或DateTime64或Stringnum— 要减去的分钟数。(U)Int*或Float*
返回值
返回 datetime 减去 num 分钟后的值,类型为 DateTime 或 DateTime64(3)
示例
从不同日期类型中减去分钟数
使用另一种 INTERVAL 语法
subtractMonths
引入版本:v1.1
从日期、日期时间或其字符串表示中减去指定数量的月份。
语法
参数
datetime— 要从中减去指定月数的日期或日期时间值。Date或Date32或DateTime或DateTime64或Stringnum— 要减去的月数。(U)Int*或Float*
返回值
返回 datetime 减去 num 个月后的结果,类型为 Date 或 Date32 或 DateTime 或 DateTime64。
示例
从不同日期类型中减去月份
使用另一种 INTERVAL 语法
subtractNanoseconds
引入版本:v20.1
从日期时间值或其字符串表示中减去指定数量的纳秒。
语法
参数
datetime— 要从中减去指定纳秒数的日期时间值。DateTime或DateTime64或Stringnum— 要减去的纳秒数。(U)Int*或Float*
返回值
返回 datetime 减去 num 纳秒后的结果,类型为 DateTime64
示例
从不同日期时间类型的值中减去纳秒
使用另一种 INTERVAL 语法
subtractQuarters
自 v20.1 起引入
从日期、日期时间或字符串形式的日期/日期时间中减去指定数量的季度。
语法
参数
datetime— 要从中减去指定数量季度的日期或日期时间值。可为Date、Date32、DateTime、DateTime64或Stringnum— 要减去的季度数。(U)Int*或Float*
返回值
返回 datetime 减去 num 个季度后的结果。类型为 Date、Date32、DateTime、DateTime64
示例
对不同日期类型减去季度数
使用另一种 INTERVAL 语法
subtractSeconds
引入版本:v1.1
从日期、日期时间,或其字符串表示中减去指定数量的秒数。
语法
参数
datetime— 要从中减去指定秒数的日期或日期时间值。Date或Date32或DateTime或DateTime64或Stringnum— 要减去的秒数。(U)Int*或Float*
返回值
返回 datetime 减去 num 秒后的结果,类型为 DateTime 或 DateTime64(3)
示例
从不同日期类型中减去秒数
使用另一种 INTERVAL 语法
subtractTupleOfIntervals
引入版本:v22.11
从日期或日期时间中依次减去一个包含多个时间间隔的元组。
语法
参数
datetime— 要从中减去时间间隔的日期或带时间的日期。Date或Date32或DateTime或DateTime64intervals— 要从datetime中减去的时间间隔元组。Tuple(Interval)
返回值
返回减去 intervals 后的 date 值。Date 或 Date32 或 DateTime 或 DateTime64
示例
从日期中减去时间间隔元组
subtractWeeks
引入版本:v1.1
从 date、带时间的 date,或它们的字符串编码形式中减去指定的周数。
语法
参数
datetime— 要从中减去指定周数的日期或日期时间值。Date或Date32或DateTime或DateTime64或Stringnum— 要减去的周数。(U)Int*或Float*
返回值
返回 datetime 减去 num 周后的结果,类型为 Date 或 Date32 或 DateTime 或 DateTime64
示例
从不同日期类型的值中减去周数
使用另一种 INTERVAL 语法
subtractYears
引入版本:v1.1
从日期、日期时间或其字符串编码的日期/日期时间中减去指定数量的年份。
语法
参数
datetime— 要从中减去指定年数的日期或日期时间值。Date或Date32或DateTime或DateTime64或Stringnum— 要减去的年数。(U)Int*或Float*
返回值
返回 datetime 减去 num 年后的值,类型为 Date 或 Date32 或 DateTime 或 DateTime64
示例
从不同的日期类型中减去年数
使用其他 INTERVAL 语法
timeDiff
引入版本:v23.4
返回两个日期或日期时间值之间的差值,单位为秒。
差值的计算方式为 enddate - startdate。
此函数等价于 dateDiff('second', startdate, enddate)。
若要按其他单位(小时、天、月等)计算时间差,请改用 dateDiff 函数。
语法
参数
startdate— 第一个时间值,作为减数(subtrahend)。Date或Date32或DateTime或DateTime64enddate— 第二个时间值,被减数(minuend),从中减去startdate。Date或Date32或DateTime或DateTime64
返回值
返回 enddate 和 startdate 之间以秒为单位的差值。Int64
示例
按秒计算时间差
计算时间差并换算为小时
等同于以秒为单位的 dateDiff
timeSlot
引入版本:v1.1
将时间向下取整到其所在半小时时间段的起始时刻。
尽管此函数可以接受扩展类型 Date32 和 DateTime64 的值作为参数,
但如果传入的时间超出正常范围(Date 为 1970 到 2149 年 / DateTime 为 1970 到 2106 年),将会产生不正确的结果。
语法
参数
time— 要舍入到半小时区间起始时刻的时间。DateTime或Date32或DateTime64time_zone— 可选。表示时区的 String 类型的常量值或表达式。String
返回值
返回舍入到半小时区间起始时刻的时间。DateTime
示例
将时间舍入到半小时区间
timeSlots
引入自:v1.1
对于一个从 StartTime 开始并持续 Duration 秒的时间区间,该函数返回一个时间点数组,由该区间内按 Size 秒向下取整后的各个时间点组成。Size 是一个可选参数,默认设置为 1800(30 分钟)。
例如,在查找对应会话中的页面浏览时可以使用该函数。
对于 DateTime64,返回值的精度可以与 StartTime 的精度不同。会采用所有给定参数中最高的精度。
语法
参数
StartTime— 区间的起始时间。DateTime或DateTime64Duration— 区间的持续时间(以秒为单位)。UInt32或DateTime64Size— 可选。时间片的大小(以秒为单位)。默认值为 1800(30 分钟)。UInt32或DateTime64
返回值
返回一个 DateTime/DateTime64 数组(返回类型与 StartTime 的类型一致)。对于 DateTime64,返回值的小数位精度可以和 StartTime 的精度不同——会取所有传入参数中最高的小数位精度。Array(DateTime) 或 Array(DateTime64)
示例
为一个时间区间生成时间片
timestamp
自 v23.9 起引入
将第一个参数 expr 转换为类型 DateTime64(6)。
如果提供第二个参数 expr_time,则会在转换后的值上加上指定的时间。
语法
参数
返回值
返回 expr 的转换结果,或在其上加上时间后的 expr,类型为 DateTime64(6)
示例
将日期字符串转换为 DateTime64(6)
向日期字符串添加时间
timezone
在 v21.4 中引入
返回当前会话的时区名称,或将时区偏移量或名称转换为规范的时区名称。
语法
别名: timeZone
参数
- 无。
返回值
返回规范时区名称,类型为 String
示例
用法示例
timezoneOf
自 v21.4 起引入
返回 DateTime 或 DateTime64 值的时区名称。
语法
别名: timeZoneOf
参数
datetime— 类型为DateTime或DateTime64的值。timezone— 可选。将datetime值从其当前时区转换到的目标时区名称。String
返回值
返回 datetime 的时区名称,类型为 String
示例
使用示例
timezoneOffset
自 v21.6 引入
返回相对于 UTC 的时区偏移量(以秒为单位)。 该函数在指定的日期和时间点会考虑夏令时以及历史时区变更。
语法
别名: timeZoneOffset
参数
datetime— 要获取其时区偏移量的DateTime值。DateTime或DateTime64
返回值
返回相对于 UTC 的偏移量,单位为秒,类型为 Int32
示例
用法示例
toDayOfMonth
引入版本:v1.1
返回 Date 或 DateTime 值所在月份的日(1-31)。
语法
别名: DAY, DAYOFMONTH
参数
datetime— 要从中获取日(月份中的天数)的日期或带时间的日期。类型为Date、Date32、DateTime或DateTime64
返回值
返回给定日期/时间对应的“日”(月份中的天数),类型为 UInt8
示例
用法示例
toDayOfWeek
引入于:v1.1
返回 Date 或 DateTime 值在其所在星期中的序号(星期几)。
toDayOfWeek() 的双参数形式允许你指定一周是从周一还是周日开始,
以及返回值是在 0 到 6 还是 1 到 7 的范围内。
| Mode | 一周的第一天 | 返回范围 |
|---|---|---|
| 0 | Monday | 1-7: Monday = 1, Tuesday = 2, ..., Sunday = 7 |
| 1 | Monday | 0-6: Monday = 0, Tuesday = 1, ..., Sunday = 6 |
| 2 | Sunday | 0-6: Sunday = 0, Monday = 1, ..., Saturday = 6 |
| 3 | Sunday | 1-7: Sunday = 1, Monday = 2, ..., Saturday = 7 |
语法
别名: DAYOFWEEK
参数
datetime— 要获取星期几的日期或带时间的日期。Date或Date32或DateTime或DateTime64mode— 可选。指定周模式的整数(0-3)。如果省略,默认为 0。UInt8timezone— 可选。用于转换的时区。String
返回值
返回给定 Date 或 DateTime 所对应的星期几,返回类型为 UInt8。
示例
用法示例
toDayOfYear
引入自:v18.4
返回 Date 或 DateTime 值在一年中的第几天(1-366)。
语法
别名: DAYOFYEAR
参数
datetime— 表示要获取其在一年中第几天的日期或日期时间值。Date或Date32或DateTime或DateTime64
返回值
返回给定 Date 或 DateTime 在一年中的第几天,类型为 UInt16
示例
用法示例
toDaysSinceYearZero
引入于:v23.9
对于给定日期,返回自公元 0000 年 1 月 1 日起在 ISO 8601 定义的前溯公历(proleptic Gregorian calendar)中已经过去的天数。
其计算方式与 MySQL 的 TO_DAYS 函数相同。
语法
别名: TO_DAYS
参数
date— 用于计算自零年起经过天数的日期或日期时间值。Date或Date32或DateTime或DateTime64time_zone— 时区。String
返回值
返回自日期 0000-01-01 起经过的天数。UInt32
示例
计算自零年以来经过的天数
toHour
自 v1.1 版本引入。
返回 DateTime 或 DateTime64 值的小时部分(0-23)。
语法
别名: HOUR
参数
datetime— 要从中获取小时的日期时间值。DateTime或DateTime64
返回值
返回 datetime 的小时(0-23)。UInt8
示例
用法示例
toISOWeek
引入版本:v20.1
返回日期或日期时间值对应的 ISO 周编号。
这是一个兼容性函数,等价于 toWeek(date, 3)。
ISO 周从周一开始,一年的第一周是包含 1 月 4 日的那一周。
根据 ISO 8601 标准,周编号范围为 1 到 53。
请注意,接近年初或年末的日期可能会返回上一年或下一年的周编号。例如, 2025 年 12 月 29 日返回第 1 周,因为它位于包含 2026 年 1 月 4 日的第一周内。
语法
参数
datetime— 要获取 ISO 周编号的日期或日期时间值。Date或DateTime或Date32或DateTime64timezone— 可选。时区。String
返回值
根据 ISO 8601 标准返回 ISO 周编号。返回 1 到 53 之间的数字。UInt8
示例
获取 ISO 周编号
ISO 周可能隶属于不同的日历年份
toISOYear
引入于:v18.4
将日期或带时间的日期转换为 ISO 年份数值。
语法
参数
datetime— 含有日期或日期时间的值。Date或Date32或DateTime或DateTime64
返回值
返回将输入值转换得到的 ISO 年编号。UInt16
示例
从日期值中获取 ISO 年
toLastDayOfMonth
自 v1.1 起引入
将日期或日期时间向上取整到所在月份的最后一天。
可以通过设置 enable_extended_results_for_datetime_functions 来配置返回类型。
语法
别名: LAST_DAY
参数
value— 要向上取整到所在月份最后一天的日期或日期时间值。Date或Date32或DateTime或DateTime64
返回值
返回给定日期或日期时间值所在月份最后一天的日期。Date
示例
向上取整到所在月份的最后一天
toLastDayOfWeek
引入自:v23.5
将日期或带时间的日期向上取整到最近的周六或周日(即下一个周六或周日)。
可以通过设置 enable_extended_results_for_datetime_functions 来配置返回类型。
语法
参数
datetime— 要转换的日期或带时间的日期。Date或DateTime或Date32或DateTime64mode— 按照toWeek()FUNCTION 中的说明确定一周的第一天。默认值为0。UInt8timezone— 可选。用于转换的时区。如果未指定,则使用服务器的时区。String
返回值
根据 mode,返回给定日期当日或之后、距离其最近的星期六或星期日,对应的日期类型为 Date 或 Date32 或 DateTime 或 DateTime64
示例
向上舍入到最近的星期六或星期日
toMillisecond
引入版本:v24.2
返回 DateTime 或 DateTime64 值的毫秒部分(0-999)。
语法
别名:MILLISECOND
参数
datetime— 要从中获取毫秒值的日期时间。DateTime或DateTime64
返回值
返回 datetime 在一分钟中的毫秒(0 - 59)。UInt16
示例
用法示例
toMinute
自 v1.1 引入
返回 Date 或 DateTime 值的分钟部分(0-59)。
语法
别名: MINUTE
参数
datetime— 要从中获取分钟的带时间的日期值。DateTime或DateTime64
返回值
返回 datetime 所在小时的分钟数 (0 - 59)。UInt8
示例
用法示例
toModifiedJulianDay
引入于:v21.1
将文本格式为 YYYY-MM-DD 的 前推格里高利历 日期转换为 Int32 类型的 修正儒略日 数值。该函数支持的日期范围为 0000-01-01 到 9999-12-31。如果参数无法解析为日期或日期无效,则会抛出异常。
语法
参数
date— 字符串格式的日期。String或FixedString
返回值
返回修正儒略日(Modified Julian Day)数值。Int32
示例
将日期转换为修正儒略日
toModifiedJulianDayOrNull
自 v21.1 引入
类似于 toModifiedJulianDay(),但不会抛出异常,而是返回 NULL。
语法
参数
date— 以文本形式表示的日期。String或FixedString
返回值
对于有效的 date,返回修正儒略日(Modified Julian Day)编号,否则返回 null。Nullable(Int32)
示例
将日期转换为修正儒略日并处理 null 值
toMonday
自 v1.1 引入
将日期或带时间的日期向下取整到所在周的星期一。返回日期值。
可以通过设置 enable_extended_results_for_datetime_functions 来配置返回类型。
语法
参数
value— 要向下取整到其所在周星期一的日期或日期时间值。Date或Date32或DateTime或DateTime64
返回值
返回给定日期或日期时间所在周的星期一对应的日期。Date
示例
将日期向下取整到所在周的星期一
toMonth
自 v1.1 版本引入
返回 Date 或 DateTime 值的月份部分(1-12)。
语法
别名: MONTH
参数
datetime— 要获取月份的日期或日期时间。类型为Date、Date32、DateTime或DateTime64
返回值
返回给定日期/时间对应的月份,类型为 UInt8
示例
用法示例
toMonthNumSinceEpoch
引入于:v25.3
返回自 1970 年起已过去的月份数
语法
参数
date— 日期或日期时间值。Date或DateTime或DateTime64
返回值
正整数
示例
示例
toQuarter
引入版本:v1.1
返回给定 Date 或 DateTime 值对应年份中的季度(1-4)。
语法
别名: QUARTER
参数
datetime— 要获取其所属季度的日期或带时间的日期。Date或Date32或DateTime或DateTime64
返回值
返回给定日期/时间在一年中的季度,类型为 UInt8
示例
用法示例
toRelativeDayNum
引入版本:v1.1
将日期或带时间的日期转换为自过去某个固定时间点以来经过的天数。
这一具体时间点属于实现细节,因此不建议单独使用该函数。
该函数的主要用途是计算两个日期或带时间的日期之间相差的天数,例如:toRelativeDayNum(dt1) - toRelativeDayNum(dt2)。
语法
参数
date— 日期或日期时间值。Date或DateTime或DateTime64
返回值
返回自过去某个固定参考时间点起计算的天数。UInt32
示例
获取相对天数序号
toRelativeHourNum
引入于:v1.1
将一个日期或带时间的日期转换为自某个固定的过去时间点以来经过的小时数。
该具体时间点属于实现细节,因此不建议将此函数单独使用。
此函数的主要用途是计算两个日期或带时间的日期之间的小时差,例如:toRelativeHourNum(dt1) - toRelativeHourNum(dt2)。
语法
参数
date— 日期或带时间的日期。Date或DateTime或DateTime64
返回值
返回自过去某个固定参考时间点以来的小时数。UInt32
示例
获取相对小时编号
toRelativeMinuteNum
引入版本:v1.1
将日期或日期时间转换为自某个固定的过去时间点起经过的分钟数。
该具体时间点属于实现细节,因此此函数不应单独使用。
该函数的主要用途是计算两个日期或日期时间之间的分钟差,例如:toRelativeMinuteNum(dt1) - toRelativeMinuteNum(dt2)。
语法
参数
date— 日期或带时间的日期。Date或DateTime或DateTime64
返回值
返回距离某个固定过去参考点的分钟编号。UInt32
示例
获取相对分钟编号
toRelativeMonthNum
引入版本:v1.1
将日期或日期时间转换为自过去某个固定时间点起经过的月份数。
该具体时间点属于实现细节,因此不建议单独调用此函数。
该函数的主要用途是计算两个日期或日期时间之间相差的月份数,例如:toRelativeMonthNum(dt1) - toRelativeMonthNum(dt2)。
语法
参数
date— 日期或带时间的日期。Date或DateTime或DateTime64
返回值
返回自某个固定历史参考点以来的月份数。UInt32
示例
获取相对月份序号
toRelativeQuarterNum
引入版本:v1.1
将日期或带时间的日期转换为自过去某个固定时间点以来经过的季度数。
这个具体时间点属于实现细节,因此不建议单独使用此函数。
该函数的主要用途是计算两个日期或带时间的日期之间相差的季度数,例如 toRelativeQuarterNum(dt1) - toRelativeQuarterNum(dt2)。
语法
参数
date— 日期或日期时间。Date或DateTime或DateTime64
返回值
返回自过去某个固定参考点起计算的季度编号。UInt32
示例
获取相对季度编号
toRelativeSecondNum
引入于:v1.1
将日期或日期时间转换为自过去某个固定时间点起经过的秒数。
该精确时间点属于实现细节,因此不建议单独使用此函数。
该函数的主要用途是用于计算两个日期或日期时间之间的秒数差,例如:toRelativeSecondNum(dt1) - toRelativeSecondNum(dt2)。
语法
参数
date— 日期或带时间的日期。Date或DateTime或DateTime64
返回值
返回自某个固定的过去时间参考点起经过的秒数。UInt32
示例
获取相对秒编号
toRelativeWeekNum
引入版本:v1.1
将日期或日期时间转换为自过去某个固定时间点以来经过的周数。
该确切时间点属于实现细节,因此不建议单独使用此函数。
该函数的主要用途是计算两个日期或日期时间之间相差的周数,例如:toRelativeWeekNum(dt1) - toRelativeWeekNum(dt2)。
语法
参数
date— 日期或带时间的日期。Date或DateTime或DateTime64
返回值
返回从某个固定的过去参考点开始计算的周数。UInt32
示例
获取相对周编号
toRelativeYearNum
引入版本:v1.1
将日期或带时间的日期转换为自某个固定历史时间点以来经过的年份数。
该时间点的具体值属于实现细节,因此不建议单独使用此函数。
该函数的主要用途是计算两个日期或带时间的日期之间的年份差,例如:toRelativeYearNum(dt1) - toRelativeYearNum(dt2)。
语法
参数
date— 日期或带时间的日期。Date或DateTime或DateTime64
返回值
返回距某个固定历史参考点的年份数。UInt16
示例
获取相对年份值
toSecond
自 v1.1 起引入
返回 DateTime 或 DateTime64 值中的秒数部分(0-59)。
语法
别名: SECOND
参数
datetime— 要从中提取秒值的日期时间。DateTime或DateTime64
返回值
返回 datetime 所在分钟内的秒数(0 - 59)。UInt8
示例
用法示例
toStartOfDay
引入版本:v1.1
将包含时间的日期向下取整到当天的起始时刻。
可以通过设置 enable_extended_results_for_datetime_functions 来配置返回类型。
语法
参数
返回值
返回向下舍入到当天起始时刻的日期时间值。Date 或 DateTime 或 Date32 或 DateTime64
示例
向下舍入到当天起始时刻
toStartOfFifteenMinutes
引入版本:v1.1
将包含时间的日期值向下取整到所在十五分钟区间的起始时刻。
可以通过设置 enable_extended_results_for_datetime_functions 来配置返回类型。
语法
参数
datetime— 需要取整的日期或日期时间值。DateTime或DateTime64
返回值
返回将日期时间值四舍五入到最近的 15 分钟区间起点后的 DateTime 或 DateTime64
示例
示例
toStartOfFiveMinutes
引入版本:v22.6
将带时间的日期向下取整到最近的五分钟区间的起始时间点。
可以通过设置 enable_extended_results_for_datetime_functions 来配置返回类型。
语法
别名: toStartOfFiveMinute
参数
datetime— 要进行取整的日期时间值。DateTime或DateTime64
返回值
返回将时间取整到最近的 5 分钟区间起始时刻后的日期时间值 DateTime 或 DateTime64
示例
示例
toStartOfHour
自 v1.1 起引入
将带时间的日期向下取整到整点(该小时的起始时刻)。
可以通过设置 enable_extended_results_for_datetime_functions 来配置返回类型。
语法
参数
datetime— 要向下取整的日期时间。DateTime或DateTime64
返回值
返回向下取整到所在小时起始时刻的日期时间。DateTime 或 DateTime64
示例
向下取整到所在小时的起始时刻
toStartOfISOYear
引入版本:v1.1
将日期或日期时间向下取整到 ISO 年的第一天,这可能与日历年不同。参见 ISO week date。
可以通过设置 enable_extended_results_for_datetime_functions 来配置返回类型。
语法
参数
value— 要向下取整到其所属 ISO 年第一天的日期或日期时间值。Date或Date32或DateTime或DateTime64
返回值
返回给定日期或日期时间值所在 ISO 年的第一天。Date
示例
向下取整到 ISO 年的第一天
toStartOfInterval
引入版本:v20.1
此函数通过 toStartOfInterval(date_or_date_with_time, INTERVAL x unit [, time_zone]) 语法,对其他 toStartOf*() 函数进行泛化。
例如,
toStartOfInterval(t, INTERVAL 1 YEAR)的返回结果与toStartOfYear(t)相同,toStartOfInterval(t, INTERVAL 1 MONTH)的返回结果与toStartOfMonth(t)相同,toStartOfInterval(t, INTERVAL 1 DAY)的返回结果与toStartOfDay(t)相同,toStartOfInterval(t, INTERVAL 15 MINUTE)的返回结果与toStartOfFifteenMinutes(t)相同。
计算是相对于特定时间点执行的:
| Interval | Start |
|---|---|
| YEAR | 第 0 年 |
| QUARTER | 1900 年第 1 季度 |
| MONTH | 1900 年 1 月 |
| WEEK | 1970 年第 1 周(01-05) |
| DAY | 1970-01-01 |
| HOUR | (*) |
| MINUTE | 1970-01-01 00:00:00 |
| SECOND | 1970-01-01 00:00:00 |
| MILLISECOND | 1970-01-01 00:00:00 |
| MICROSECOND | 1970-01-01 00:00:00 |
| NANOSECOND | 1970-01-01 00:00:00 |
| (*) hour intervals are special: the calculation is always performed relative to 00:00:00 (midnight) of the current day. As a result, only | |
| hour values between 1 and 23 are useful. |
(*) 小时间隔比较特殊:始终相对于当天的 00:00:00(午夜)进行计算。因此,只有 1 到 23 之间的小时值是有意义的。
如果指定了 WEEK 单位,toStartOfInterval 假定一周从星期一开始。请注意,此行为不同于 toStartOfWeek 函数,其默认一周从星期日开始。
第二个重载版本分别模拟了 TimescaleDB 的 time_bucket() 函数以及 PostgreSQL 的 date_bin() 函数。
语法
别名: time_bucket, date_bin
参数
value— 要向下取整的日期或日期时间值。Date或DateTime或DateTime64x— 时间间隔的长度数值。-unit— 时间间隔单位:YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND、MILLISECOND、MICROSECOND、NANOSECOND。-time_zone— 可选。时区名称(字符串)。-origin— 可选。用于计算的起始时间点(仅适用于第二种重载)。
返回值
返回包含输入值的时间间隔的起始时间点。DateTime
示例
基本时间间隔取整
使用原点时间
toStartOfMicrosecond
自 v22.6 起引入
将日期时间向下取整到微秒。
语法
参数
datetime— 日期和时间。DateTime64timezone— 可选。返回值所使用的时区。如果未指定,函数会使用value参数的时区。String
返回值
包含亚微秒部分的输入值 DateTime64
示例
不带时区的查询
带时区的查询
toStartOfMillisecond
引入版本:v22.6
将带时间的日期向下取整到毫秒起始时刻。
语法
参数
datetime— 日期和时间。DateTime64timezone— 可选。返回值使用的时区。如果未指定,则函数使用value参数的时区。String
返回值
保留子毫秒部分的输入值。DateTime64
示例
未指定时区的查询
使用时区的查询
toStartOfMinute
引入于:v1.1
将日期时间向下取整到所在分钟的起始时刻。
可以通过设置 enable_extended_results_for_datetime_functions 来配置返回类型。
语法
参数
datetime— 要进行舍入的日期时间值。DateTime或DateTime64
返回值
返回向下舍入到该分钟起始时刻的日期时间值。DateTime 或 DateTime64
示例
向下舍入到该分钟的起始时刻
toStartOfMonth
引入版本:v1.1
将日期或日期时间向下取整到所在月份的第一天。
可以通过设置 enable_extended_results_for_datetime_functions 来配置返回类型。
语法
参数
value— 要向下取整到其所在月份第一天的日期或日期时间值。Date或Date32或DateTime或DateTime64
返回值
返回给定日期或日期时间值所在月份的第一天。Date
示例
向下取整到所在月份第一天
toStartOfNanosecond
引入版本:v22.6
将带时间的日期向下取整到纳秒级的起始时刻。
语法
参数
datetime— 日期和时间。DateTime64timezone— 可选。返回值所使用的时区。如果未指定,函数使用value参数的时区。String
返回值
输入值,精确到纳秒。DateTime64
示例
不带时区的查询
使用时区的查询
toStartOfQuarter
自 v1.1 版本引入
将日期或带时间的日期向下取整到所在季度的第一天。季度的第一天为 1 月 1 日、4 月 1 日、7 月 1 日或 10 月 1 日。
可以通过设置 enable_extended_results_for_datetime_functions 来配置返回类型。
语法
参数
value— 要向下取整到所在季度第一天的日期或日期时间值。Date或Date32或DateTime或DateTime64
返回值
返回指定日期或日期时间所在季度的第一天。Date
示例
向下取整到所在季度的第一天
toStartOfSecond
引入版本:v20.5
将日期时间向下取整到所在秒的起始时刻。
语法
参数
datetime— 要截断其子秒部分的日期和时间值。DateTime64timezone— 可选。返回值所使用的时区。如果未指定,函数会使用value参数的时区。String
返回值
返回去除子秒部分的输入值。DateTime64
示例
不带时区的查询
带时区的查询
toStartOfTenMinutes
引入于:v20.1
将带时间的日期向下取整到最近的 10 分钟区间的起始时刻。
可以通过设置 enable_extended_results_for_datetime_functions 来配置返回类型。
语法
参数
datetime— 带时间的日期(日期时间值)。DateTime或DateTime64
返回值
返回将日期时间值四舍五入到最近 10 分钟区间起始时刻的结果,类型为 DateTime 或 DateTime64
示例
示例
toStartOfWeek
引入于:v20.1
将日期或日期时间向下取整到最近的周日或周一。
可以通过设置 enable_extended_results_for_datetime_functions 来配置返回类型。
语法
参数
datetime— 要转换的日期或带时间的日期。Date、DateTime、Date32或DateTime64mode— 如toWeek()FUNCTION 中所述,用于确定一周的第一天。默认值为0。UInt8timezone— 执行转换时使用的时区。如果未指定,则使用服务器时区。String
返回值
根据 mode 的取值,返回给定日期当日或之前、最接近的星期日或星期一对应的日期。Date、Date32、DateTime 或 DateTime64
示例
向下舍入到最近的星期日或星期一
toStartOfYear
自 v1.1 引入
将日期或日期时间向下取整到所在年份的第一天。返回一个 Date 类型的值。
可以通过设置 enable_extended_results_for_datetime_functions 来配置返回类型。
语法
参数
value— 要向下取整的日期或带时间的日期。Date或Date32或DateTime或DateTime64
返回值
返回给定日期/时间所在年份第一天的 Date 值。
示例
向下取整到所在年份的第一天
toTimeWithFixedDate
引入版本:v1.1
从日期或日期时间值中提取时间部分。
返回结果是相对于某个固定时间点的偏移量,目前为 1970-01-02,
但该固定时间点的具体取值属于实现细节,将来可能会发生变化。
因此不应单独直接使用 toTime。
该函数的主要用途是计算两个日期或日期时间值之间的时间差,例如 toTime(dt1) - toTime(dt2)。
语法
参数
date— 要转换为时间的日期。Date或DateTime或DateTime64timezone— 可选。返回值所使用的时区。String
返回值
返回日期或日期时间的时间部分,以相对于某个固定时间点(当前选为 1970-01-02)的偏移量表示。DateTime
示例
计算两个日期之间的时间差
toTimezone
引入版本:v1.1
将 DateTime 或 DateTime64 转换为指定的时区。
数据的内部值(Unix 时间秒数)不会改变。
仅该值的时区属性和字符串表示形式会发生变化。
语法
别名: toTimeZone
参数
date— 要转换的值。DateTime或DateTime64timezone— 目标时区的名称。String
返回值
返回与输入相同的时间戳,但时区为指定的 DateTime 或 DateTime64
示例
用法示例
toUTCTimestamp
引入版本:v23.8
将一个日期或日期时间值从某个时区转换为 UTC 时区的时间戳。此函数主要用于与 Apache Spark 及类似框架的兼容性。
语法
别名: to_utc_timestamp
参数
datetime— 日期或日期时间类型的常量值或表达式。DateTime或DateTime64time_zone— 表示时区的 String 类型常量值或表达式。String
返回值
返回 UTC 时区的日期或日期时间值。DateTime 或 DateTime64
示例
将时区转换为 UTC 时间
toUnixTimestamp
引入于:v1.1
将 String、Date 或 DateTime 转换为 Unix 时间戳(自 1970-01-01 00:00:00 UTC 起的秒数),并以 UInt32 返回。
语法
参数
date— 待转换的值。Date或Date32或DateTime或DateTime64或Stringtimezone— 可选。用于转换的时区。如果未指定,则使用服务器时区。String
返回值
返回 Unix 时间戳。UInt32
示例
用法示例
toWeek
引入版本:v20.1
该函数返回日期或日期时间对应的周序号。toWeek() 的双参数形式允许指定一周是从星期日还是星期一开始,以及返回值是在 0 到 53 还是 1 到 53 的范围内。
toISOWeek() 是一个兼容函数,等价于 toWeek(date,3)。
下表描述了 mode 参数的工作方式。
| Mode | 一周的第一天 | 范围 | 第 1 周是第一周…… |
|---|---|---|---|
| 0 | Sunday | 0-53 | 在本年度内包含一个 Sunday 的那一周 |
| 1 | Monday | 0-53 | 在本年度内包含 4 天或以上的那一周 |
| 2 | Sunday | 1-53 | 在本年度内包含一个 Sunday 的那一周 |
| 3 | Monday | 1-53 | 在本年度内包含 4 天或以上的那一周 |
| 4 | Sunday | 0-53 | 在本年度内包含 4 天或以上的那一周 |
| 5 | Monday | 0-53 | 在本年度内包含一个 Monday 的那一周 |
| 6 | Sunday | 1-53 | 在本年度内包含 4 天或以上的那一周 |
| 7 | Monday | 1-53 | 在本年度内包含一个 Monday 的那一周 |
| 8 | Sunday | 1-53 | 包含 1 月 1 日的那一周 |
| 9 | Monday | 1-53 | 包含 1 月 1 日的那一周 |
对于含义为“在本年度内包含 4 天或以上”的 mode 值,周序号按 ISO 8601:1988 编号:
- 如果包含 1 月 1 日的那一周在新的一年中有 4 天或以上,则该周为第 1 周。
- 否则,该周是上一年的最后一周,接下来的那一周才是第 1 周。
对于含义为“包含 1 月 1 日”的 mode 值,包含 1 月 1 日的那一周为第 1 周。 该周在新的一年中包含多少天都无关紧要,即使只包含 1 天。 也就是说,如果 12 月的最后一周包含下一年的 1 月 1 日,则它是下一年的第 1 周。
第一个参数也可以指定为 String 类型,格式需由 parseDateTime64BestEffort() 所支持。对字符串参数的支持仅出于与 MySQL 的兼容性考虑,以满足某些第三方工具的预期。由于未来字符串参数支持可能会依赖新的 MySQL 兼容性 SETTING,且字符串解析通常较慢,推荐不要使用该形式。
语法
别名: week
参数
datetime— 要获取周数的日期或日期时间。Date或DateTimemode— 可选。0到9的模式决定一周的第一天以及周数的取值范围。默认值为0。time_zone— 可选。时区。String
返回值
根据指定的模式返回周数。UInt32
示例
使用不同的模式获取周数
toYYYYMM
引入于:v1.1
将日期或日期时间转换为一个 UInt32 整数,包含年份和月份(YYYY * 100 + MM)。
接受第二个可选的时区参数。如果指定该参数,时区必须是字符串常量。
此函数是函数 YYYYMMDDToDate() 的反向操作。
语法
参数
datetime— 要转换的日期或日期时间。Date、Date32、DateTime、DateTime64timezone— 可选。用于转换的时区。如果指定该参数,则时区必须是字符串常量。String
返回值
返回一个包含年份和月份的 UInt32 数值,计算方式为 YYYY * 100 + MM。UInt32
示例
将当前日期转换为 YYYYMM 格式
toYYYYMMDD
引入于:v1.1
将日期或带时间的日期转换为一个 UInt32 数值,包含年月日数字(YYYY * 10000 + MM * 100 + DD)。接受一个可选的第二个参数用于指定时区。如果提供,该时区必须是字符串常量。
语法
参数
datetime— 要转换的日期或带时间的日期。Date或Date32或DateTime或DateTime64timezone— 可选。用于转换的时区。如果指定,时区必须是字符串常量。String
返回值
返回一个包含年、月和日的 UInt32 整数(YYYY * 10000 + MM * 100 + DD)。UInt32
示例
将当前日期转换为 YYYYMMDD 格式
toYYYYMMDDhhmmss
引入于:v1.1
将日期或日期时间转换为一个 UInt64 数值,表示年份、月份、日期以及时间(小时、分钟、秒)的组合编码(YYYY * 10000000000 + MM * 100000000 + DD * 1000000 + hh * 10000 + mm * 100 + ss)。
接受第二个可选的时区参数。如果提供,则时区必须是字符串常量。
语法
参数
datetime— 要转换的日期或日期时间值。Date或Date32或DateTime或DateTime64timezone— 可选。转换时使用的时区。若提供,该时区必须是字符串常量。String
返回值
返回一个 UInt64 类型的数值,包含年、月、日、时、分和秒(YYYY * 10000000000 + MM * 100000000 + DD * 1000000 + hh * 10000 + mm * 100 + ss)。UInt64
示例
将当前日期和时间转换为 YYYYMMDDhhmmss 格式
toYear
自 v1.1 版本引入。
返回 Date 或 DateTime 值的公历年份部分(AD)。
语法
别名: YEAR
参数
datetime— 要从中提取年份的日期或日期时间值。Date或Date32或DateTime或DateTime64
返回值
返回给定 Date 或 DateTime 的年份,类型为 UInt16
示例
用法示例
toYearNumSinceEpoch
引入版本:v25.3
返回自 1970 年起经过的年份数。
语法
参数
date— 要转换的日期或日期时间。Date或DateTime或DateTime64
返回值
正整数
示例
示例
toYearWeek
引入于:v20.1
返回日期对应的年份和周数。对于一年中的第一周和最后一周,结果中的年份可能与参数日期所在的年份不同。
mode 参数的行为与 toWeek() 的 mode 参数相同。
警告:toYearWeek() 返回的周数可能与 toWeek() 返回的不同。toWeek() 始终在给定年份的上下文中返回周数,如果 toWeek() 返回 0,则 toYearWeek() 会返回对应于上一年最后一周的值。参见下面示例中的 prev_yearWeek。
第一个参数也可以是 String 类型,格式需为 parseDateTime64BestEffort() 所支持的格式。对字符串参数的支持仅用于与 MySQL 的兼容性,因为某些第三方工具依赖此行为。由于未来对字符串参数的支持可能会依赖新的 MySQL 兼容性设置,且字符串解析通常较慢,因此建议不要使用这种方式。
语法
别名: yearweek
参数
datetime— 要获取其年份和周数的日期或带时间的日期值。Date或DateTimemode— 可选。0到9的模式决定一周的第一天以及周编号的取值范围。默认值为0。timezone— 可选。时区。String
返回值
返回将年份和周编号组合在一起的整数值。UInt32
示例
使用不同模式获取 year-week 组合
today
引入版本:v1.1
返回在查询分析时刻的当前日期。等同于 toDate(now())。
语法
别名: curdate, current_date
参数
- 无。
返回值
返回当前日期,类型为 Date
示例
用法示例
yesterday
引入版本:v1.1
不接受任何参数,并在查询分析期间的某个时间点返回昨天的日期。
语法
参数
- 无。
返回值
返回昨天的日期。Date
示例
获取昨天的日期