用于处理日期和时间的函数
本节中的大多数函数支持可选的时区参数,例如 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
将时间间隔加到指定的 date、date with time,或其字符串编码形式上。
如果相加结果超出该数据类型的取值范围,则结果未定义。
语法
参数
datetime— 将要加上interval的日期或带时间的日期。Date或Date32或DateTime或DateTime64或Stringinterval— 要添加的时间间隔。Interval
返回值
返回通过将 interval 加到 datetime 后得到的日期或带时间的日期。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 引入
将一个间隔加到另一个间隔或间隔元组上。
相同类型的间隔会合并为单个间隔。例如,如果传入 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*
返回值
返回 date_time 加上 num 微秒后的值,类型为 DateTime64
示例
为不同的日期时间类型添加微秒
使用替代的 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)
返回值
返回加上 intervals 后的 date 值,类型为 Date 或 Date32 或 DateTime 或 DateTime64
示例
向日期添加时间间隔元组
addWeeks
引入版本:v1.1
向日期、日期时间或其字符串表示形式添加指定的周数。
语法
参数
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
返回值
返回用 unit 表示的 enddate 和 startdate 之间的差值。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— 截断结果所使用的时间间隔类型。unit参数不区分大小写。Unit 兼容性 nanosecond仅与 DateTime64 兼容 microsecond仅与 DateTime64 兼容 millisecond仅与 DateTime64 兼容 secondminutehourdayweekmonthquarteryearStringdatetime— 日期和时间。Date或Date32或DateTime或DateTime64timezone— 可选。返回值使用的时区名称。如果未指定,则函数使用datetime参数的时区。String
返回值
返回截断后的日期时间值。
| Unit 参数 | datetime 参数 | 返回类型 |
|---|---|---|
| Year, Quarter, Month, Week | Date32 or DateTime64 or Date or DateTime | Date32 或 Date |
| Day, Hour, Minute, Second | Date32, DateTime64, Date, or DateTime | DateTime64 或 DateTime |
| Millisecond, Microsecond, | Any | DateTime64 |
| Nanosecond | 精度(scale)为 3、6 或 9 |
示例
不带时区的截断
按指定时区进行截断
formatDateTime
引入于:v1.1
根据给定的格式字符串格式化日期或日期时间。format 必须是常量表达式,因此同一个结果列中不能使用多种不同的格式。
formatDateTime 使用 MySQL 的日期时间格式样式,参见 MySQL 文档。
该函数的反向操作是 parseDateTime。
通过占位符,你可以为输出字符串定义格式模板。
下表中的示例列展示了对 2018-01-02 22:33:44 的格式化结果。
占位符说明:
| Placeholder | 描述 | 示例 |
|---|---|---|
| %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 | ISO 8601 星期几编号,星期一为 1(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 的小数精度,而不是固定的 6 位。 - 在 ClickHouse 早于 v23.4 的版本中,
%M输出的是分钟(00-59),而不是完整的月份名称(January-December)。
语法
别名:DATE_FORMAT
参数
datetime— 要格式化的日期或日期时间。Date或Date32或DateTime或DateTime64format— 带有占位字段的格式字符串。Stringtimezone— 可选。用于格式化时间的时区名称。String
返回值
按照指定的格式返回日期和时间值。String
示例
使用年份占位符格式化日期
格式化带小数秒的 DateTime64
按时区格式化
formatDateTimeInJodaSyntax
引入版本:v20.1
与 formatDateTime 类似,但会使用 Joda 风格而不是 MySQL 风格格式化日期时间。请参考 Joda Time 文档。
此函数的反向操作为 parseDateTimeInJodaSyntax。
通过使用替换字段,你可以为结果字符串定义一个模式。
替换字段:
| 占位符 | 描述 | 展示形式 | 示例 |
|---|---|---|---|
| G | 纪元 | 文本 | AD |
| C | 纪元的世纪 (>=0) | 数字 | 20 |
| Y | 纪元年份 (>=0) | 年 | 1996 |
| x | weekyear(尚不支持) | 年 | 1996 |
| w | weekyear 的周(尚不支持) | 数字 | 27 |
| e | 一周中的第几天 | 数字 | 2 |
| E | 一周中的星期 | 文本 | Tuesday; Tue |
| y | 年 | 年 | 1996 |
| D | 一年中的第几天 | 数字 | 189 |
| M | 一年中的月份 | 月 | July; Jul; 07 |
| d | 一个月中的第几天 | 数字 | 10 |
| a | 上下午 | 文本 | PM |
| K | 上下午中的小时 (0~11) | 数字 | 0 |
| h | 上下午中的时钟小时 (1~12) | 数字 | 12 |
| H | 一天中的小时 (0~23) | 数字 | 0 |
| k | 一天中的时钟小时 (1~24) | 数字 | 24 |
| m | 一小时中的分钟 | 数字 | 30 |
| s | 一分钟中的秒 | 数字 | 55 |
| S | 秒的小数部分 | 数字 | 978 |
| z | 时区 | 文本 | Eastern Standard Time; EST |
| Z | 时区偏移量 | 偏移量 | -0800; -0812 |
| ' | 文本转义 | 分隔符 | |
| '' | 单引号 | 字面量 | ' |
语法
参数
datetime— 要格式化的日期或日期时间值。DateTime或Date或Date32或DateTime64format— 含有 Joda 风格占位符的格式字符串。Stringtimezone— 可选。用于格式化时间的时区名称。String
返回值
根据指定的格式返回时间和日期值。String
示例
使用 Joda 语法格式化日期时间
fromDaysSinceYearZero
引入于:v23.11
对于给定的自公元 0000 年 1 月 1 日以来经过的天数,返回在 ISO 8601 定义的推前公历(proleptic Gregorian calendar)中的对应日期。
该计算方式与 MySQL 的 FROM_DAYS() 函数相同。如果结果无法用 Date 类型的取值范围表示,则行为未定义。
语法
别名:FROM_DAYS
参数
days— 自第 0 年起经过的天数。UInt32
返回值
返回自第 0 年起经过指定天数所对应的日期。Date
示例
将自第 0 年起的天数转换为日期
fromDaysSinceYearZero32
引入于:v23.11
对于自公元0000 年 1 月 1 日起经过的给定天数,返回在 ISO 8601 定义的前推公历中的对应日期。
该计算方式与 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— 修正儒略日(Modified Julian Day)数值。(U)Int*
返回值
返回日期的文本表示形式。String
示例
将修正儒略日转换为日期
fromModifiedJulianDayOrNull
引入于:v21.1
类似于 fromModifiedJulianDay(),但不会抛出异常,而是返回 NULL。
语法
参数
day— 修正儒略日数值。(U)Int*
返回值
当 day 参数有效时,返回日期的文本形式,否则返回 null。Nullable(String)
示例
将修正儒略日转换为日期并处理空值
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
示例
根据 year、month、day 构造日期
由年份和一年中的第几天计算日期
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
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 值,DateTime
示例
根据 year、month、day、hour、minute、second 构造 DateTime
makeDateTime64
自 v22.6 引入
根据 year、month、day、hour、minute、second 创建一个 DateTime64 值,可选指定小数部分、精度和时区。
语法
参数
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 引入
将一个取反的间隔值加到另一个间隔或间隔元组中。
注意:相同类型的间隔会被合并为单个间隔。例如,如果传入 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 起提供
从日期、日期时间,或字符串编码的日期/日期时间中减去指定的周数。
语法
参数
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— 要减去的第一个时间值(减数)。Date或Date32或DateTime或DateTime64enddate— 用来执行减法运算的第二个时间值(被减数)。Date或Date32或DateTime或DateTime64
返回值
返回 enddate 与 startdate 之间以秒为单位的差值。Int64
示例
以秒计算时间差
计算时间差并换算为小时
等价于按秒计算的 dateDiff
timeSlot
引入于:v1.1
将时间舍入到以 30 分钟为长度的时间区间的起始时刻。
尽管此函数可以接受扩展类型 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 时,返回值的小数精度(scale)可能与 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 转换后的值,或在其基础上加上时间后的结果。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或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 的范围内。
| 模式 | 一周的第一天 | 范围 |
|---|---|---|
| 0 | 周一 | 1-7:周一 = 1,周二 = 2,…,周日 = 7 |
| 1 | 周一 | 0-6:周一 = 0,周二 = 1,…,周日 = 6 |
| 2 | 周日 | 0-6:周日 = 0,周一 = 1,…,周六 = 6 |
| 3 | 周日 | 1-7:周日 = 1,周一 = 2,…,周六 = 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— 要计算自公元 0 年起经过天数的日期或带时间的日期。Date或Date32或DateTime或DateTime64time_zone— 时区。String
返回值
返回自日期 0000-01-01 起已经过去的天数。UInt32
示例
计算自公元 0 年起经过的天数
toHour
引入于:v1.1
返回 DateTime 或 DateTime64 值的小时部分(0-23)。
语法
别名:HOUR
参数
datetime— 要从中获取小时数的日期时间值。DateTime或DateTime64
返回值
返回 datetime 的小时数(0-23)。UInt8
示例
使用示例
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()函数中的说明确定一周的第一天。默认值为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
返回值
返回修正儒略日数。Int32
示例
将日期转换为修正儒略日数
toModifiedJulianDayOrNull
自 v21.1 起引入
类似于 toModifiedJulianDay(),但不会抛出异常,而是返回 NULL。
语法
参数
date— 文本形式的日期。String或FixedString
返回值
对于有效的 date,返回修正儒略日编号,否则返回 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
将包含时间的日期向下舍入到最近的 5 分钟区间的起始时间。
可以通过设置 enable_extended_results_for_datetime_functions 来配置返回类型。
语法
别名: toStartOfFiveMinute
参数
datetime— 需要取整的日期时间值。DateTime或DateTime64
返回值
返回将日期时间取整到最近五分钟区间起始时刻的值,类型为 DateTime 或 DateTime64
示例
示例
toStartOfHour
自 v1.1 起引入
将带时间的日期向下取整到所在小时的起始时刻(整点)。
可以通过设置 enable_extended_results_for_datetime_functions 来配置返回类型。
语法
参数
datetime— 要进行舍入的日期时间值。DateTime或DateTime64
返回值
返回向下取整到整点起始时间的日期时间值。DateTime 或 DateTime64
示例
向下取整到整点
toStartOfISOYear
引入版本:v1.1
将日期或日期时间向下取整到该 ISO 年的第一天,这可能与公历年份不同。参见 ISO 周日期。
可以通过设置 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 | year 0 |
| QUARTER | 1900 Q1 |
| MONTH | 1900 January |
| WEEK | 1970, 1st week (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 |
| (*) 小时间隔是特殊的:计算始终是相对于当日 00:00:00(午夜)进行的。 | |
如果指定了 WEEK 单位,toStartOfInterval 认为一周从周一开始。注意,这一行为不同于 toStartOfWeek 函数,其默认是一周从周日开始。
第二个重载分别模拟了 TimescaleDB 的 time_bucket() 函数以及 PostgreSQL 的 date_bin() 函数。
语法
别名: date_bin, time_bucket
参数
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()函数中的说明确定一周的第一天。默认值为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
将某一时区的 date 或带时间的日期值转换为 UTC 时区对应的时间戳。此函数主要用于与 Apache Spark 及类似框架的兼容性。
语法
别名: to_utc_timestamp
参数
datetime—Date或带时间的类型的常量值或表达式。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
此函数返回 date 或 datetime 的周序号。toWeek() 的双参数形式允许你指定一周从星期日还是星期一开始,以及返回值是在 0 到 53 范围内还是在 1 到 53 范围内。
toISOWeek() 是一个兼容性函数,等价于 toWeek(date,3)。
下表说明了 mode 参数的工作方式。
| Mode | First day of week | Range | Week 1 is the first week ... |
|---|---|---|---|
| 0 | Sunday | 0-53 | with a Sunday in this year |
| 1 | Monday | 0-53 | with 4 or more days this year |
| 2 | Sunday | 1-53 | with a Sunday in this year |
| 3 | Monday | 1-53 | with 4 or more days this year |
| 4 | Sunday | 0-53 | with 4 or more days this year |
| 5 | Monday | 0-53 | with a Monday in this year |
| 6 | Sunday | 1-53 | with 4 or more days this year |
| 7 | Monday | 1-53 | with a Monday in this year |
| 8 | Sunday | 1-53 | contains January 1 |
| 9 | Monday | 1-53 | contains January 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 兼容性设置,并且字符串解析通常较慢,因此不建议使用它。
语法
别名: 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或DateTime64类型。timezone— 可选。用于转换的时区。如果提供该参数,则时区必须是字符串常量,对应String类型。
返回值
返回一个 UInt32 整数,包含年、月和日,编码格式为 YYYY * 10000 + MM * 100 + DD。UInt32
示例
将当前日期转换为 YYYYMMDD 格式
toYYYYMMDDhhmmss
引入版本:v1.1
将日期或带时间的日期转换为 UInt64 数值,格式为 YYYYMMDDhhmmss(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 值中的年份部分(公元年)。
语法
别名: 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
示例
在不同 mode 下获取年-周组合
today
首次引入于:v1.1
在查询分析阶段返回当前日期。等同于 toDate(now())。
语法
别名: curdate, current_date
参数
- 无。
返回值
返回当前日期,类型为 Date。
示例
使用示例
yesterday
引入于:v1.1
不接受任何参数,并在查询分析期间的某个时间点返回昨天的日期。
语法
参数
- 无。
返回值
返回昨天的日期。Date
示例
获取昨天的日期