日期和时间函数
本节中的大多数函数接受一个可选的时区参数,例如 Europe/Amsterdam。在这种情况下,时区是指定的时区,而不是本地(默认)时区。
示例
SELECT
toDateTime('2016-06-15 23:00:00') AS time,
toDate(time) AS date_local,
toDate(time, 'Asia/Yekaterinburg') AS date_yekat,
toString(time, 'US/Samoa') AS time_samoa
┌────────────────time─┬─date_local─┬─date_yekat─┬─time_samoa──────────┐
│ 2016-06-15 23:00:00 │ 2016-06-15 │ 2016-06-16 │ 2016-06-15 09:00:00 │
└─────────────────────┴────────────┴────────────┴─────────────────────┘
makeDate
创建一个 Date
- 从年、月和日参数,或
- 从年和年中天数参数。
语法
makeDate(year, month, day);
makeDate(year, day_of_year);
别名
MAKEDATE(year, month, day);MAKEDATE(year, day_of_year);
参数
year— 年份。 整数、浮点数 或 Decimal。month— 月份。 整数、浮点数 或 Decimal。day— 日。 整数、浮点数 或 Decimal。day_of_year— 年中天数。 整数、浮点数 或 Decimal。
返回值
- 从参数创建的日期。 Date。
示例
从年、月和日创建一个 Date
SELECT makeDate(2023, 2, 28) AS Date;
结果
┌───────date─┐
│ 2023-02-28 │
└────────────┘
从年和年中天数参数创建一个 Date
SELECT makeDate(2023, 42) AS Date;
结果
┌───────date─┐
│ 2023-02-11 │
└────────────┘
makeDate32
从年、月、日(或可选的年和日)创建一个 Date32 类型的日期。
语法
makeDate32(year, [month,] day)
参数
如果省略 month,则 day 应取 1 到 365 之间的值,否则应取 1 到 31 之间的值。
返回值
- 从参数创建的日期。 Date32。
示例
从年、月和日创建一个日期
查询
SELECT makeDate32(2024, 1, 1);
结果
2024-01-01
从年和年中天数创建一个 Date
查询
SELECT makeDate32(2024, 100);
结果
2024-04-09
makeDateTime
从年、月、日、小时、分钟和秒参数创建一个 DateTime。
语法
makeDateTime(year, month, day, hour, minute, second[, timezone])
参数
year— 年份。 整数、浮点数 或 Decimal。month— 月份。 整数、浮点数 或 Decimal。day— 日。 整数、浮点数 或 Decimal。hour— 小时。 整数、浮点数 或 Decimal。minute— 分钟。 整数、浮点数 或 Decimal。second— 秒。 整数、浮点数 或 Decimal。timezone— 返回值的时区(可选)。
返回值
- 从参数创建的带时间的日期。 DateTime。
示例
SELECT makeDateTime(2023, 2, 28, 17, 12, 33) AS DateTime;
结果
┌────────────DateTime─┐
│ 2023-02-28 17:12:33 │
└─────────────────────┘
makeDateTime64
从其组件:年、月、日、小时、分钟、秒创建一个 DateTime64 数据类型值。带有可选的亚秒精度。
语法
makeDateTime64(year, month, day, hour, minute, second[, precision])
参数
year— 年份 (0-9999)。 整数、浮点数 或 Decimal。month— 月份 (1-12)。 整数、浮点数 或 Decimal。day— 日 (1-31)。 整数、浮点数 或 Decimal。hour— 小时 (0-23)。 整数、浮点数 或 Decimal。minute— 分钟 (0-59)。 整数、浮点数 或 Decimal。second— 秒 (0-59)。 整数、浮点数 或 Decimal。precision— 亚秒组件的可选精度 (0-9)。 整数。
返回值
- 从提供的参数创建的日期和时间。 DateTime64。
示例
SELECT makeDateTime64(2023, 5, 15, 10, 30, 45, 779, 5);
┌─makeDateTime64(2023, 5, 15, 10, 30, 45, 779, 5)─┐
│ 2023-05-15 10:30:45.00779 │
└─────────────────────────────────────────────────┘
timestamp
将第一个参数 'expr' 转换为 DateTime64(6) 类型。如果提供了第二个参数 'expr_time',它会将指定的时间添加到转换后的值。
语法
timestamp(expr[, expr_time])
别名: TIMESTAMP
参数
示例
SELECT timestamp('2023-12-31') as ts;
结果
┌─────────────────────────ts─┐
│ 2023-12-31 00:00:00.000000 │
└────────────────────────────┘
SELECT timestamp('2023-12-31 12:00:00', '12:00:00.11') as ts;
结果
┌─────────────────────────ts─┐
│ 2024-01-01 00:00:00.110000 │
└────────────────────────────┘
返回值
- DateTime64(6)
timeZone
返回当前会话的时区,即设置 session_timezone 的值。 如果该函数在分布式表的上下文中执行,则它会生成一个普通列,其值与每个分片相关,否则它会生成一个常量值。
语法
timeZone()
别名: timezone。
返回值
- 时区。 字符串。
示例
SELECT timezone()
结果
┌─timezone()─────┐
│ America/Denver │
└────────────────┘
另请参阅
serverTimeZone
返回服务器的时区,即设置 timezone 的值。 如果该函数在分布式表的上下文中执行,则它会生成一个普通列,其值与每个分片相关。 否则,它会生成一个常量值。
语法
serverTimeZone()
别名: serverTimezone。
返回值
- 时区。 字符串。
示例
SELECT serverTimeZone()
结果
┌─serverTimeZone()─┐
│ UTC │
└──────────────────┘
另请参阅
toTimeZone
将日期或带时间的日期转换为指定的时区。 不更改数据的内部值(Unix 秒数),仅更改值的时区属性和值的字符串表示形式。
语法
toTimezone(value, timezone)
别名: toTimezone。
参数
value— 时间或日期和时间。 DateTime64。timezone— 返回值的时区。 字符串。 此参数是一个常量,因为toTimezone更改列的时区(时区是DateTime*类型的属性)。
返回值
- 日期和时间。 DateTime。
示例
SELECT toDateTime('2019-01-01 00:00:00', 'UTC') AS time_utc,
toTypeName(time_utc) AS type_utc,
toInt32(time_utc) AS int32utc,
toTimeZone(time_utc, 'Asia/Yekaterinburg') AS time_yekat,
toTypeName(time_yekat) AS type_yekat,
toInt32(time_yekat) AS int32yekat,
toTimeZone(time_utc, 'US/Samoa') AS time_samoa,
toTypeName(time_samoa) AS type_samoa,
toInt32(time_samoa) AS int32samoa
FORMAT Vertical;
结果
Row 1:
──────
time_utc: 2019-01-01 00:00:00
type_utc: DateTime('UTC')
int32utc: 1546300800
time_yekat: 2019-01-01 05:00:00
type_yekat: DateTime('Asia/Yekaterinburg')
int32yekat: 1546300800
time_samoa: 2018-12-31 13:00:00
type_samoa: DateTime('US/Samoa')
int32samoa: 1546300800
另请参阅
- formatDateTime - 支持非常量时区。
- toString - 支持非常量时区。
timeZoneOf
返回 DateTime 或 DateTime64 数据类型的时区名称。
语法
timeZoneOf(value)
别名: timezoneOf。
参数
value— 日期和时间。 DateTime 或 DateTime64。
返回值
- 时区名称。 字符串。
示例
SELECT timezoneOf(now());
结果
┌─timezoneOf(now())─┐
│ Etc/UTC │
└───────────────────┘
timeZoneOffset
返回从 UTC 的时区偏移量(以秒为单位)。 该函数将夏令时和指定日期和时间的历史时区更改考虑在内。 IANA 时区数据库用于计算偏移量。
语法
timeZoneOffset(value)
别名: timezoneOffset。
参数
value— 日期和时间。 DateTime 或 DateTime64。
返回值
- 从 UTC 的偏移量(以秒为单位)。 Int32。
示例
SELECT toDateTime('2021-04-21 10:20:30', 'America/New_York') AS Time, toTypeName(Time) AS Type,
timeZoneOffset(Time) AS Offset_in_seconds, (Offset_in_seconds / 3600) AS Offset_in_hours;
结果
┌────────────────Time─┬─Type─────────────────────────┬─Offset_in_seconds─┬─Offset_in_hours─┐
│ 2021-04-21 10:20:30 │ DateTime('America/New_York') │ -14400 │ -4 │
└─────────────────────┴──────────────────────────────┴───────────────────┴─────────────────┘
toYear
返回日期或带时间的日期的年份组成部分 (AD)。
语法
toYear(value)
别名: YEAR
参数
value- Date、Date32、DateTime 或 DateTime64
返回值
- 给定日期/时间的年份。 UInt16。
示例
SELECT toYear(toDateTime('2023-04-21 10:20:30'))
结果
┌─toYear(toDateTime('2023-04-21 10:20:30'))─┐
│ 2023 │
└───────────────────────────────────────────┘
toQuarter
返回日期或带时间的日期的季度 (1-4)。
语法
toQuarter(value)
别名: QUARTER
参数
value- Date、Date32、DateTime 或 DateTime64
返回值
- 给定日期/时间的年份季度(1、2、3 或 4)。 UInt8。
示例
SELECT toQuarter(toDateTime('2023-04-21 10:20:30'))
结果
┌─toQuarter(toDateTime('2023-04-21 10:20:30'))─┐
│ 2 │
└──────────────────────────────────────────────┘
toMonth
返回日期或带时间的日期的月份组成部分 (1-12)。
语法
toMonth(value)
别名: MONTH
参数
value- Date、Date32、DateTime 或 DateTime64
返回值
- 给定日期/时间的年份月份(1 - 12)。 UInt8。
示例
SELECT toMonth(toDateTime('2023-04-21 10:20:30'))
结果
┌─toMonth(toDateTime('2023-04-21 10:20:30'))─┐
│ 4 │
└────────────────────────────────────────────┘
toDayOfYear
返回日期或带时间的日期的年中天数 (1-366)。
语法
toDayOfYear(value)
别名: DAYOFYEAR
参数
value- Date、Date32、DateTime 或 DateTime64
返回值
- 给定日期/时间的年中天数(1 - 366)。 UInt16。
示例
SELECT toDayOfYear(toDateTime('2023-04-21 10:20:30'))
结果
┌─toDayOfYear(toDateTime('2023-04-21 10:20:30'))─┐
│ 111 │
└────────────────────────────────────────────────┘
toDayOfMonth
返回日期或带时间的日期的月中天数 (1-31)。
语法
toDayOfMonth(value)
别名: DAYOFMONTH, DAY
参数
value- Date、Date32、DateTime 或 DateTime64
返回值
- 给定日期/时间的月中天数(1 - 31)。 UInt8。
示例
SELECT toDayOfMonth(toDateTime('2023-04-21 10:20:30'))
结果
┌─toDayOfMonth(toDateTime('2023-04-21 10:20:30'))─┐
│ 21 │
└─────────────────────────────────────────────────┘
toDayOfWeek
返回日期或带时间的日期的周中天数。
toDayOfWeek() 的双参数形式允许您指定一周是从星期一还是星期日开始,以及返回值应在 0 到 6 还是 1 到 7 的范围内。如果省略 mode 参数,则默认模式为 0。日期时区可以指定为第三个参数。
| 模式 | 一周的第一天 | 范围 |
|---|---|---|
| 0 | 星期一 | 1-7:星期一 = 1,星期二 = 2,...,星期日 = 7 |
| 1 | 星期一 | 0-6:星期一 = 0,星期二 = 1,...,星期日 = 6 |
| 2 | 星期日 | 0-6:星期日 = 0,星期一 = 1,...,星期六 = 6 |
| 3 | 星期日 | 1-7:星期日 = 1,星期一 = 2,...,星期六 = 7 |
语法
toDayOfWeek(t[, mode[, timezone]])
别名: DAYOFWEEK。
参数
t- Date、Date32、DateTime 或 DateTime64mode- 确定一周的第一天是哪一天。 可能的值为 0、1、2 或 3。 有关差异,请参见上表。timezone- 可选参数,其行为类似于任何其他转换函数
第一个参数也可以指定为 String,格式受 parseDateTime64BestEffort() 支持。 仅出于与某些第三方工具期望的 MySQL 兼容性的原因,才存在字符串参数支持。 由于字符串参数支持将来可能会依赖于新的 MySQL 兼容性设置,并且由于字符串解析通常很慢,因此建议不要使用它。
返回值
- 给定日期/时间的周中天数(1-7),具体取决于所选模式
示例
以下日期是 2023 年 4 月 21 日,星期五
SELECT
toDayOfWeek(toDateTime('2023-04-21')),
toDayOfWeek(toDateTime('2023-04-21'), 1)
结果
┌─toDayOfWeek(toDateTime('2023-04-21'))─┬─toDayOfWeek(toDateTime('2023-04-21'), 1)─┐
│ 5 │ 4 │
└───────────────────────────────────────┴──────────────────────────────────────────┘
toHour
返回带时间的日期的小时组成部分 (0-24)。
假设如果时钟提前,则提前一小时,发生在凌晨 2 点;如果时钟延后,则延后一小时,发生在凌晨 3 点(这并不总是完全发生的时间 - 这取决于时区)。
语法
toHour(value)
别名: HOUR
参数
value- DateTime 或 DateTime64
返回值
- 给定日期/时间的小时(0 - 23)。 UInt8。
示例
SELECT toHour(toDateTime('2023-04-21 10:20:30'))
结果
┌─toHour(toDateTime('2023-04-21 10:20:30'))─┐
│ 10 │
└───────────────────────────────────────────┘
toMinute
返回带时间的日期的分钟组成部分 (0-59)。
语法
toMinute(value)
别名: MINUTE
参数
value- DateTime 或 DateTime64
返回值
- 给定日期/时间的分钟(0 - 59)。 UInt8。
示例
SELECT toMinute(toDateTime('2023-04-21 10:20:30'))
结果
┌─toMinute(toDateTime('2023-04-21 10:20:30'))─┐
│ 20 │
└─────────────────────────────────────────────┘
toSecond
返回带时间的日期的秒组成部分 (0-59)。 不考虑闰秒。
语法
toSecond(value)
别名: SECOND
参数
value- DateTime 或 DateTime64
返回值
- 给定日期/时间的秒(0 - 59)。 UInt8。
示例
SELECT toSecond(toDateTime('2023-04-21 10:20:30'))
结果
┌─toSecond(toDateTime('2023-04-21 10:20:30'))─┐
│ 30 │
└─────────────────────────────────────────────┘
toMillisecond
返回带时间的日期的毫秒组成部分 (0-999)。
语法
toMillisecond(value)
参数*
value- DateTime 或 DateTime64
别名: MILLISECOND
SELECT toMillisecond(toDateTime64('2023-04-21 10:20:30.456', 3))
结果
┌──toMillisecond(toDateTime64('2023-04-21 10:20:30.456', 3))─┐
│ 456 │
└────────────────────────────────────────────────────────────┘
返回值
- 给定日期/时间的毫秒(0 - 59)。 UInt16。
toUnixTimestamp
将字符串、日期或带时间的日期转换为 UInt32 表示形式的 Unix 时间戳。
如果使用字符串调用该函数,它接受一个可选的时区参数。
语法
toUnixTimestamp(date)
toUnixTimestamp(str, [timezone])
返回值
- 返回 Unix 时间戳。 UInt32。
示例
SELECT
'2017-11-05 08:07:47' AS dt_str,
toUnixTimestamp(dt_str) AS from_str,
toUnixTimestamp(dt_str, 'Asia/Tokyo') AS from_str_tokyo,
toUnixTimestamp(toDateTime(dt_str)) AS from_datetime,
toUnixTimestamp(toDateTime64(dt_str, 0)) AS from_datetime64,
toUnixTimestamp(toDate(dt_str)) AS from_date,
toUnixTimestamp(toDate32(dt_str)) AS from_date32
FORMAT Vertical;
结果
Row 1:
──────
dt_str: 2017-11-05 08:07:47
from_str: 1509869267
from_str_tokyo: 1509836867
from_datetime: 1509869267
from_datetime64: 1509869267
from_date: 1509840000
from_date32: 1509840000
下面描述的 toStartOf*、toLastDayOf*、toMonday、timeSlot 函数的返回类型由配置参数 enable_extended_results_for_datetime_functions 确定,默认值为 0。
行为对于
enable_extended_results_for_datetime_functions = 0:- 函数
toStartOfYear、toStartOfISOYear、toStartOfQuarter、toStartOfMonth、toStartOfWeek、toLastDayOfWeek、toLastDayOfMonth、toMonday返回Date或DateTime。 - 函数
toStartOfDay、toStartOfHour、toStartOfFifteenMinutes、toStartOfTenMinutes、toStartOfFiveMinutes、toStartOfMinute、timeSlot返回DateTime。 尽管这些函数可以将扩展类型Date32和DateTime64的值作为参数,但是向它们传递超出正常范围的时间(对于Date为 1970 年到 2149 年/对于DateTime为 2106 年)将产生错误的结果。
- 函数
enable_extended_results_for_datetime_functions = 1:- 函数
toStartOfYear、toStartOfISOYear、toStartOfQuarter、toStartOfMonth、toStartOfWeek、toLastDayOfWeek、toLastDayOfMonth、toMonday在它们的参数是Date或DateTime时返回Date或DateTime,并且在它们的参数是Date32或DateTime64时返回Date32或DateTime64。 - 函数
toStartOfDay、toStartOfHour、toStartOfFifteenMinutes、toStartOfTenMinutes、toStartOfFiveMinutes、toStartOfMinute、timeSlot在它们的参数是Date或DateTime时返回DateTime,并且在它们的参数是Date32或DateTime64时返回DateTime64。
- 函数
toStartOfYear
将日期或带时间的日期向下舍入到年初的第一天。 返回日期作为 Date 对象。
语法
toStartOfYear(value)
参数
value- Date、Date32、DateTime 或 DateTime64
返回值
- 输入日期/时间的年初第一天。 Date。
示例
SELECT toStartOfYear(toDateTime('2023-04-21 10:20:30'))
结果
┌─toStartOfYear(toDateTime('2023-04-21 10:20:30'))─┐
│ 2023-01-01 │
└──────────────────────────────────────────────────┘
toStartOfISOYear
将日期或带时间的日期向下舍入到 ISO 年的第一天,这可能与“常规”年份不同。 (请参阅 https://en.wikipedia.org/wiki/ISO_week_date。)
语法
toStartOfISOYear(value)
参数
value- Date、Date32、DateTime 或 DateTime64
返回值
- 输入日期/时间的年初第一天。 Date。
示例
SELECT toStartOfISOYear(toDateTime('2023-04-21 10:20:30'))
结果
┌─toStartOfISOYear(toDateTime('2023-04-21 10:20:30'))─┐
│ 2023-01-02 │
└─────────────────────────────────────────────────────┘
toStartOfQuarter
将日期或带时间的日期向下舍入到季度的第一天。 季度的第一天是 1 月 1 日、4 月 1 日、7 月 1 日或 10 月 1 日。 返回日期。
语法
toStartOfQuarter(value)
参数
value- Date、Date32、DateTime 或 DateTime64
返回值
- 给定日期/时间的季度第一天。 Date。
示例
SELECT toStartOfQuarter(toDateTime('2023-04-21 10:20:30'))
结果
┌─toStartOfQuarter(toDateTime('2023-04-21 10:20:30'))─┐
│ 2023-04-01 │
└─────────────────────────────────────────────────────┘
toStartOfMonth
将日期或带时间的日期向下舍入到每月的第一天。 返回日期。
语法
toStartOfMonth(value)
参数
value- Date、Date32、DateTime 或 DateTime64
返回值
- 给定日期/时间的每月第一天。 Date。
示例
SELECT toStartOfMonth(toDateTime('2023-04-21 10:20:30'))
结果
┌─toStartOfMonth(toDateTime('2023-04-21 10:20:30'))─┐
│ 2023-04-01 │
└───────────────────────────────────────────────────┘
解析不正确日期的行为是特定于实现的。 ClickHouse 可能会返回零日期、抛出异常或执行“自然”溢出。
toLastDayOfMonth
将日期或带时间的日期舍入到每月的最后一天。 返回日期。
语法
toLastDayOfMonth(value)
别名: LAST_DAY
参数
value- Date、Date32、DateTime 或 DateTime64
返回值
- 给定日期/时间的每月最后一天。 Date。
示例
SELECT toLastDayOfMonth(toDateTime('2023-04-21 10:20:30'))
结果
┌─toLastDayOfMonth(toDateTime('2023-04-21 10:20:30'))─┐
│ 2023-04-30 │
└─────────────────────────────────────────────────────┘
toMonday
将日期或带时间的日期向下舍入到最近的星期一。 返回日期。
语法
toMonday(value)
参数
value- Date、Date32、DateTime 或 DateTime64
返回值
- 给定日期或之前最近的星期一的日期。 Date。
示例
SELECT
toMonday(toDateTime('2023-04-21 10:20:30')), /* a Friday */
toMonday(toDate('2023-04-24')), /* already a Monday */
结果
┌─toMonday(toDateTime('2023-04-21 10:20:30'))─┬─toMonday(toDate('2023-04-24'))─┐
│ 2023-04-17 │ 2023-04-24 │
└─────────────────────────────────────────────┴────────────────────────────────┘
toStartOfWeek
将日期或带时间的日期向下舍入到最近的星期日或星期一。 返回日期。 mode 参数的工作方式与函数 toWeek() 中的 mode 参数完全相同。 如果未指定 mode,则默认为 0。
语法
toStartOfWeek(t[, mode[, timezone]])
参数
t- Date、Date32、DateTime 或 DateTime64mode- 确定一周的第一天,如 toWeek() 函数中所述timezone- 可选参数,其行为类似于任何其他转换函数
返回值
- 给定日期或之前最近的星期日或星期一的日期,具体取决于 mode。 Date。
示例
SELECT
toStartOfWeek(toDateTime('2023-04-21 10:20:30')), /* a Friday */
toStartOfWeek(toDateTime('2023-04-21 10:20:30'), 1), /* a Friday */
toStartOfWeek(toDate('2023-04-24')), /* a Monday */
toStartOfWeek(toDate('2023-04-24'), 1) /* a Monday */
FORMAT Vertical
结果
Row 1:
──────
toStartOfWeek(toDateTime('2023-04-21 10:20:30')): 2023-04-16
toStartOfWeek(toDateTime('2023-04-21 10:20:30'), 1): 2023-04-17
toStartOfWeek(toDate('2023-04-24')): 2023-04-23
toStartOfWeek(toDate('2023-04-24'), 1): 2023-04-24
toLastDayOfWeek
将日期或带时间的日期向上舍入到最近的星期六或星期日。 返回日期。 mode 参数的工作方式与函数 toWeek() 中的 mode 参数完全相同。 如果未指定 mode,则假定 mode 为 0。
语法
toLastDayOfWeek(t[, mode[, timezone]])
参数
t- Date、Date32、DateTime 或 DateTime64mode- 确定一周的最后一天,如 toWeek 函数中所述timezone- 可选参数,其行为类似于任何其他转换函数
返回值
- 给定日期或之后最近的星期日或星期一的日期,具体取决于 mode。 Date。
示例
SELECT
toLastDayOfWeek(toDateTime('2023-04-21 10:20:30')), /* a Friday */
toLastDayOfWeek(toDateTime('2023-04-21 10:20:30'), 1), /* a Friday */
toLastDayOfWeek(toDate('2023-04-22')), /* a Saturday */
toLastDayOfWeek(toDate('2023-04-22'), 1) /* a Saturday */
FORMAT Vertical
结果
Row 1:
──────
toLastDayOfWeek(toDateTime('2023-04-21 10:20:30')): 2023-04-22
toLastDayOfWeek(toDateTime('2023-04-21 10:20:30'), 1): 2023-04-23
toLastDayOfWeek(toDate('2023-04-22')): 2023-04-22
toLastDayOfWeek(toDate('2023-04-22'), 1): 2023-04-23
toStartOfDay
将带时间的日期向下舍入到一天的开始。
语法
toStartOfDay(value)
参数
value- Date、Date32、DateTime 或 DateTime64
返回值
- 给定日期/时间的一天开始。 DateTime。
示例
SELECT toStartOfDay(toDateTime('2023-04-21 10:20:30'))
结果
┌─toStartOfDay(toDateTime('2023-04-21 10:20:30'))─┐
│ 2023-04-21 00:00:00 │
└─────────────────────────────────────────────────┘
toStartOfHour
将带时间的日期向下舍入到小时的开始。
语法
toStartOfHour(value)
参数
value- DateTime 或 DateTime64
返回值
- 给定日期/时间的小时开始。 DateTime。
示例
SELECT
toStartOfHour(toDateTime('2023-04-21 10:20:30')),
toStartOfHour(toDateTime64('2023-04-21', 6))
结果
┌─toStartOfHour(toDateTime('2023-04-21 10:20:30'))─┬─toStartOfHour(toDateTime64('2023-04-21', 6))─┐
│ 2023-04-21 10:00:00 │ 2023-04-21 00:00:00 │
└──────────────────────────────────────────────────┴──────────────────────────────────────────────┘
toStartOfMinute
将带时间的日期向下舍入到分钟的开始。
语法
toStartOfMinute(value)
参数
value- DateTime 或 DateTime64
返回值
- 给定日期/时间的分钟开始。 DateTime。
示例
SELECT
toStartOfMinute(toDateTime('2023-04-21 10:20:30')),
toStartOfMinute(toDateTime64('2023-04-21 10:20:30.5300', 8))
FORMAT Vertical
结果
Row 1:
──────
toStartOfMinute(toDateTime('2023-04-21 10:20:30')): 2023-04-21 10:20:00
toStartOfMinute(toDateTime64('2023-04-21 10:20:30.5300', 8)): 2023-04-21 10:20:00
toStartOfSecond
截断亚秒。
语法
toStartOfSecond(value, [timezone])
参数
value— 日期和时间。 DateTime64。timezone— 返回值的时区(可选)。 如果未指定,则该函数使用value参数的时区。 字符串。
返回值
- 不带亚秒的输入值。 DateTime64。
示例
不带时区的查询
WITH toDateTime64('2020-01-01 10:20:30.999', 3) AS dt64
SELECT toStartOfSecond(dt64);
结果
┌───toStartOfSecond(dt64)─┐
│ 2020-01-01 10:20:30.000 │
└─────────────────────────┘
带时区的查询
WITH toDateTime64('2020-01-01 10:20:30.999', 3) AS dt64
SELECT toStartOfSecond(dt64, 'Asia/Istanbul');
结果
┌─toStartOfSecond(dt64, 'Asia/Istanbul')─┐
│ 2020-01-01 13:20:30.000 │
└────────────────────────────────────────┘
另请参阅
- 时区服务器配置参数。
toStartOfMillisecond
将带时间的日期向下舍入到毫秒的开始。
语法
toStartOfMillisecond(value, [timezone])
参数
value— 日期和时间。 DateTime64。timezone— 返回值的时区(可选)。 如果未指定,则该函数使用value参数的时区。 字符串。
返回值
- 带亚毫秒的输入值。 DateTime64。
示例
不带时区的查询
WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64
SELECT toStartOfMillisecond(dt64);
结果
┌────toStartOfMillisecond(dt64)─┐
│ 2020-01-01 10:20:30.999000000 │
└───────────────────────────────┘
带时区的查询
┌─toStartOfMillisecond(dt64, 'Asia/Istanbul')─┐
│ 2020-01-01 12:20:30.999000000 │
└─────────────────────────────────────────────┘
结果
┌─toStartOfMillisecond(dt64, 'Asia/Istanbul')─┐
│ 2020-01-01 12:20:30.999 │
└─────────────────────────────────────────────┘
toStartOfMicrosecond
将带时间的日期向下舍入到微秒的开始。
语法
toStartOfMicrosecond(value, [timezone])
参数
value— 日期和时间。 DateTime64。timezone— 返回值的时区(可选)。 如果未指定,则该函数使用value参数的时区。 字符串。
返回值
- 带亚微秒的输入值。 DateTime64。
示例
不带时区的查询
WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64
SELECT toStartOfMicrosecond(dt64);
结果
┌────toStartOfMicrosecond(dt64)─┐
│ 2020-01-01 10:20:30.999999000 │
└───────────────────────────────┘
带时区的查询
WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64
SELECT toStartOfMicrosecond(dt64, 'Asia/Istanbul');
结果
┌─toStartOfMicrosecond(dt64, 'Asia/Istanbul')─┐
│ 2020-01-01 12:20:30.999999000 │
└─────────────────────────────────────────────┘
另请参阅
- 时区服务器配置参数。
toStartOfNanosecond
将带时间的日期向下舍入到纳秒的开始。
语法
toStartOfNanosecond(value, [timezone])
参数
value— 日期和时间。 DateTime64。timezone— 返回值的时区(可选)。 如果未指定,则该函数使用value参数的时区。 字符串。
返回值
- 带纳秒的输入值。 DateTime64。
示例
不带时区的查询
WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64
SELECT toStartOfNanosecond(dt64);
结果
┌─────toStartOfNanosecond(dt64)─┐
│ 2020-01-01 10:20:30.999999999 │
└───────────────────────────────┘
带时区的查询
WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64
SELECT toStartOfNanosecond(dt64, 'Asia/Istanbul');
结果
┌─toStartOfNanosecond(dt64, 'Asia/Istanbul')─┐
│ 2020-01-01 12:20:30.999999999 │
└────────────────────────────────────────────┘
另请参阅
- 时区服务器配置参数。
toStartOfFiveMinutes
将带时间的日期向下舍入到五分钟间隔的开始。
语法
toStartOfFiveMinutes(value)
参数
value- DateTime 或 DateTime64
返回值
- 给定日期/时间的五分钟间隔的开始。 DateTime。
示例
SELECT
toStartOfFiveMinutes(toDateTime('2023-04-21 10:17:00')),
toStartOfFiveMinutes(toDateTime('2023-04-21 10:20:00')),
toStartOfFiveMinutes(toDateTime('2023-04-21 10:23:00'))
FORMAT Vertical
结果
Row 1:
──────
toStartOfFiveMinutes(toDateTime('2023-04-21 10:17:00')): 2023-04-21 10:15:00
toStartOfFiveMinutes(toDateTime('2023-04-21 10:20:00')): 2023-04-21 10:20:00
toStartOfFiveMinutes(toDateTime('2023-04-21 10:23:00')): 2023-04-21 10:20:00
toStartOfTenMinutes
将带时间的日期向下舍入到十分钟间隔的开始。
语法
toStartOfTenMinutes(value)
参数
value- DateTime 或 DateTime64
返回值
- 给定日期/时间的十分钟间隔的开始。 DateTime。
示例
SELECT
toStartOfTenMinutes(toDateTime('2023-04-21 10:17:00')),
toStartOfTenMinutes(toDateTime('2023-04-21 10:20:00')),
toStartOfTenMinutes(toDateTime('2023-04-21 10:23:00'))
FORMAT Vertical
结果
Row 1:
──────
toStartOfTenMinutes(toDateTime('2023-04-21 10:17:00')): 2023-04-21 10:10:00
toStartOfTenMinutes(toDateTime('2023-04-21 10:20:00')): 2023-04-21 10:20:00
toStartOfTenMinutes(toDateTime('2023-04-21 10:23:00')): 2023-04-21 10:20:00
toStartOfFifteenMinutes
将带时间的日期向下舍入到十五分钟间隔的开始。
语法
toStartOfFifteenMinutes(value)
参数
value- DateTime 或 DateTime64
返回值
- 给定日期/时间的十五分钟间隔的开始。 DateTime。
示例
SELECT
toStartOfFifteenMinutes(toDateTime('2023-04-21 10:17:00')),
toStartOfFifteenMinutes(toDateTime('2023-04-21 10:20:00')),
toStartOfFifteenMinutes(toDateTime('2023-04-21 10:23:00'))
FORMAT Vertical
结果
Row 1:
──────
toStartOfFifteenMinutes(toDateTime('2023-04-21 10:17:00')): 2023-04-21 10:15:00
toStartOfFifteenMinutes(toDateTime('2023-04-21 10:20:00')): 2023-04-21 10:15:00
toStartOfFifteenMinutes(toDateTime('2023-04-21 10:23:00')): 2023-04-21 10:15:00
toStartOfInterval
此函数使用 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)相同的结果。
计算是相对于特定的时间点执行的
| 间隔 | 开始 |
|---|---|
| YEAR | 0 年 |
| QUARTER | 1900 年 Q1 |
| 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 |
(*) 小时间隔是特殊的:计算始终相对于当天 00:00:00(午夜)执行。 因此,只有 1 到 23 之间的小时值才有用。
如果指定了 unit WEEK,则 toStartOfInterval 假定周从星期一开始。 请注意,此行为与函数 toStartOfWeek 的行为不同,在函数 toStartOfWeek 中,周默认从星期日开始。
语法
toStartOfInterval(value, INTERVAL x unit[, time_zone])
toStartOfInterval(value, INTERVAL x unit[, origin[, time_zone]])
别名: time_bucket, date_bin。
第二个重载模拟 TimescaleDB 的 time_bucket() 函数,以及 PostgreSQL 的 date_bin() 函数,例如
SELECT toStartOfInterval(toDateTime('2023-01-01 14:45:00'), INTERVAL 1 MINUTE, toDateTime('2023-01-01 14:35:30'));
结果
┌───toStartOfInterval(...)─┐
│ 2023-01-01 14:44:30 │
└──────────────────────────┘
另请参阅
toTime
将带时间的日期转换为某个固定的日期,同时保留时间。
语法
toTime(date[,timezone])
参数
date— 要转换为时间的日期。 Date/DateTime/DateTime64。timezone(可选) — 返回值的时区。 String。
返回值
- DateTime,其日期等于
1970-01-02,同时保留时间。 DateTime。
如果 date 输入参数包含亚秒组件,则它们将在返回的秒精度的 DateTime 值中被删除。
示例
查询
SELECT toTime(toDateTime64('1970-12-10 01:20:30.3000',3)) AS result, toTypeName(result);
结果
┌──────────────result─┬─toTypeName(result)─┐
│ 1970-01-02 01:20:30 │ DateTime │
└─────────────────────┴────────────────────┘
toRelativeYearNum
将日期或带时间的日期转换为自过去某个固定点以来经过的年数。
语法
toRelativeYearNum(date)
参数
date— 日期或带时间的日期。 Date/DateTime/DateTime64。
返回值
- 自过去某个固定参考点以来的年数。 UInt16。
示例
查询
SELECT
toRelativeYearNum(toDate('2002-12-08')) AS y1,
toRelativeYearNum(toDate('2010-10-26')) AS y2
结果
┌───y1─┬───y2─┐
│ 2002 │ 2010 │
└──────┴──────┘
toRelativeQuarterNum
将日期或带时间的日期转换为自过去某个固定点以来经过的季度数。
语法
toRelativeQuarterNum(date)
参数
date— 日期或带时间的日期。 Date/DateTime/DateTime64。
返回值
- 自过去某个固定参考点以来的季度数。 UInt32。
示例
查询
SELECT
toRelativeQuarterNum(toDate('1993-11-25')) AS q1,
toRelativeQuarterNum(toDate('2005-01-05')) AS q2
结果
┌───q1─┬───q2─┐
│ 7975 │ 8020 │
└──────┴──────┘
toRelativeMonthNum
将日期或带时间的日期转换为自过去某个固定点以来经过的月数。
语法
toRelativeMonthNum(date)
参数
date— 日期或带时间的日期。 Date/DateTime/DateTime64。
返回值
- 自过去某个固定参考点以来的月数。 UInt32。
示例
查询
SELECT
toRelativeMonthNum(toDate('2001-04-25')) AS m1,
toRelativeMonthNum(toDate('2009-07-08')) AS m2
结果
┌────m1─┬────m2─┐
│ 24016 │ 24115 │
└───────┴───────┘
toRelativeWeekNum
将日期或带时间的日期转换为自过去某个固定点以来经过的周数。
语法
toRelativeWeekNum(date)
参数
date— 日期或带时间的日期。 Date/DateTime/DateTime64。
返回值
- 自过去某个固定参考点以来的周数。 UInt32。
示例
查询
SELECT
toRelativeWeekNum(toDate('2000-02-29')) AS w1,
toRelativeWeekNum(toDate('2001-01-12')) AS w2
结果
┌───w1─┬───w2─┐
│ 1574 │ 1619 │
└──────┴──────┘
toRelativeDayNum
将日期或带时间的日期转换为自过去某个固定点以来经过的天数。
语法
toRelativeDayNum(date)
参数
date— 日期或带时间的日期。 Date/DateTime/DateTime64。
返回值
- 自过去某个固定参考点以来的天数。 UInt32。
示例
查询
SELECT
toRelativeDayNum(toDate('1993-10-05')) AS d1,
toRelativeDayNum(toDate('2000-09-20')) AS d2
结果
┌───d1─┬────d2─┐
│ 8678 │ 11220 │
└──────┴───────┘
toRelativeHourNum
将日期或带时间的日期转换为自过去某个固定点以来经过的小时数。
语法
toRelativeHourNum(date)
参数
date— 日期或带时间的日期。 Date/DateTime/DateTime64。
返回值
- 自过去某个固定参考点以来的小时数。 UInt32。
示例
查询
SELECT
toRelativeHourNum(toDateTime('1993-10-05 05:20:36')) AS h1,
toRelativeHourNum(toDateTime('2000-09-20 14:11:29')) AS h2
结果
┌─────h1─┬─────h2─┐
│ 208276 │ 269292 │
└────────┴────────┘
toRelativeMinuteNum
将日期或带时间的日期转换为自过去某个固定点以来经过的分钟数。
语法
toRelativeMinuteNum(date)
参数
date— 日期或带时间的日期。 Date/DateTime/DateTime64。
返回值
- 自过去某个固定参考点以来的分钟数。 UInt32。
示例
查询
SELECT
toRelativeMinuteNum(toDateTime('1993-10-05 05:20:36')) AS m1,
toRelativeMinuteNum(toDateTime('2000-09-20 14:11:29')) AS m2
结果
┌───────m1─┬───────m2─┐
│ 12496580 │ 16157531 │
└──────────┴──────────┘
toRelativeSecondNum
将日期或带时间的日期转换为自过去某个固定点以来经过的秒数。
语法
toRelativeSecondNum(date)
参数
date— 日期或带时间的日期。 Date/DateTime/DateTime64。
返回值
- 自过去某个固定参考点以来的秒数。 UInt32。
示例
查询
SELECT
toRelativeSecondNum(toDateTime('1993-10-05 05:20:36')) AS s1,
toRelativeSecondNum(toDateTime('2000-09-20 14:11:29')) AS s2
结果
┌────────s1─┬────────s2─┐
│ 749794836 │ 969451889 │
└───────────┴───────────┘
toISOYear
将日期或带时间的日期转换为 ISO 年份,类型为 UInt16 数字。
语法
toISOYear(value)
参数
value— 带有日期或带时间的数值。 Date, Date32, DateTime 或 DateTime64
返回值
- 输入值转换为 ISO 年份数字。 UInt16。
示例
查询
SELECT
toISOYear(toDate('2024/10/02')) as year1,
toISOYear(toDateTime('2024-10-02 01:30:00')) as year2
结果
┌─year1─┬─year2─┐
│ 2024 │ 2024 │
└───────┴───────┘
toISOWeek
将日期或带时间的日期转换为包含 ISO 周数的 UInt8 数字。
语法
toISOWeek(value)
参数
value— 带有日期或带时间的数值。
返回值
value转换为当前的 ISO 周数。 UInt8。
示例
查询
SELECT
toISOWeek(toDate('2024/10/02')) AS week1,
toISOWeek(toDateTime('2024/10/02 01:30:00')) AS week2
响应
┌─week1─┬─week2─┐
│ 40 │ 40 │
└───────┴───────┘
toWeek
此函数返回日期或日期时间的周数。 toWeek() 的双参数形式允许您指定周是否从星期日或星期一开始,以及返回值应在 0 到 53 还是 1 到 53 的范围内。如果省略 mode 参数,则默认模式为 0。
toISOWeek() 是一个兼容性函数,等效于 toWeek(date,3)。
下表描述了 mode 参数的工作方式。
| 模式 | 一周的第一天 | 范围 | 第 1 周是本年度的第一个周... |
|---|---|---|---|
| 0 | 星期日 | 0-53 | 在本年度内包含星期日 |
| 1 | 星期一 | 0-53 | 在本年度内包含 4 天或更多天 |
| 2 | 星期日 | 1-53 | 在本年度内包含星期日 |
| 3 | 星期一 | 1-53 | 在本年度内包含 4 天或更多天 |
| 4 | 星期日 | 0-53 | 在本年度内包含 4 天或更多天 |
| 5 | 星期一 | 0-53 | 在本年度内包含星期一 |
| 6 | 星期日 | 1-53 | 在本年度内包含 4 天或更多天 |
| 7 | 星期一 | 1-53 | 在本年度内包含星期一 |
| 8 | 星期日 | 1-53 | 包含 1 月 1 日 |
| 9 | 星期一 | 1-53 | 包含 1 月 1 日 |
对于模式值为“在本年度内包含 4 天或更多天”的情况,周数按照 ISO 8601:1988 标准编号
-
如果包含 1 月 1 日的周在新的一年中有 4 天或更多天,则它是第 1 周。
-
否则,它是上一年的最后一周,下一周是第 1 周。
对于模式值为“包含 1 月 1 日”的情况,包含 1 月 1 日的周是第 1 周。 这与该周在新的一年中包含多少天无关,即使它只包含一天。 也就是说,如果 12 月的最后一周包含下一年的 1 月 1 日,那么它将是下一年的第 1 周。
语法
toWeek(t[, mode[, time_zone]])
别名: WEEK
参数
t– 日期或 DateTime。mode– 可选参数,取值范围为 [0,9],默认为 0。Timezone– 可选参数,其行为类似于任何其他转换函数。
第一个参数也可以指定为 String,格式受 parseDateTime64BestEffort() 支持。 仅出于与某些第三方工具期望的 MySQL 兼容性的原因,才存在字符串参数支持。 由于字符串参数支持将来可能会依赖于新的 MySQL 兼容性设置,并且由于字符串解析通常很慢,因此建议不要使用它。
示例
SELECT toDate('2016-12-27') AS date, toWeek(date) AS week0, toWeek(date,1) AS week1, toWeek(date,9) AS week9;
┌───────date─┬─week0─┬─week1─┬─week9─┐
│ 2016-12-27 │ 52 │ 52 │ 1 │
└────────────┴───────┴───────┴───────┘
toYearWeek
返回日期的年份和周数。 对于年初和年末的第一个和最后一个星期,结果中的年份可能与日期参数中的年份不同。
mode 参数的工作方式与 toWeek() 的 mode 参数相同。 对于单参数语法,使用模式值 0。
toISOYear() 是一个兼容性函数,等效于 intDiv(toYearWeek(date,3),100)。
toYearWeek() 返回的周数可能与 toWeek() 返回的不同。 toWeek() 始终在给定年份的上下文中返回周数,并且在 toWeek() 返回 0 的情况下,toYearWeek() 返回与上一年的最后一周对应的值。 请参阅下面的示例中的 prev_yearWeek。
语法
toYearWeek(t[, mode[, timezone]])
别名: YEARWEEK
第一个参数也可以指定为 String,格式受 parseDateTime64BestEffort() 支持。 仅出于与某些第三方工具期望的 MySQL 兼容性的原因,才存在字符串参数支持。 由于字符串参数支持将来可能会依赖于新的 MySQL 兼容性设置,并且由于字符串解析通常很慢,因此建议不要使用它。
示例
SELECT toDate('2016-12-27') AS date, toYearWeek(date) AS yearWeek0, toYearWeek(date,1) AS yearWeek1, toYearWeek(date,9) AS yearWeek9, toYearWeek(toDate('2022-01-01')) AS prev_yearWeek;
┌───────date─┬─yearWeek0─┬─yearWeek1─┬─yearWeek9─┬─prev_yearWeek─┐
│ 2016-12-27 │ 201652 │ 201652 │ 201701 │ 202152 │
└────────────┴───────────┴───────────┴───────────┴───────────────┘
toDaysSinceYearZero
对于给定的日期,返回自 公元 0 年 1 月 1 日 以来经过的天数,该日期基于 ISO 8601 定义的普罗列普特 Gregorian 历法。 此计算与 MySQL 的 TO_DAYS() 函数相同。
语法
toDaysSinceYearZero(date[, time_zone])
别名: TO_DAYS
参数
date— 用于计算自公元 0 年以来经过天数的日期。 Date, Date32, DateTime 或 DateTime64。time_zone— String 类型常量值或表示时区的表达式。 String 类型
返回值
自 0000-01-01 日期以来经过的天数。 UInt32。
示例
SELECT toDaysSinceYearZero(toDate('2023-09-08'));
结果
┌─toDaysSinceYearZero(toDate('2023-09-08')))─┐
│ 713569 │
└────────────────────────────────────────────┘
另请参阅
fromDaysSinceYearZero
对于给定的自 公元 0 年 1 月 1 日 以来经过的天数,返回 ISO 8601 定义的普罗列普特 Gregorian 历法 中的对应日期。 此计算与 MySQL 的 FROM_DAYS() 函数相同。
如果结果无法在 Date 类型的范围内表示,则结果未定义。
语法
fromDaysSinceYearZero(days)
别名: FROM_DAYS
参数
days— 自公元 0 年以来经过的天数。
返回值
与自公元 0 年以来经过的天数对应的日期。 Date。
示例
SELECT fromDaysSinceYearZero(739136), fromDaysSinceYearZero(toDaysSinceYearZero(toDate('2023-09-08')));
结果
┌─fromDaysSinceYearZero(739136)─┬─fromDaysSinceYearZero(toDaysSinceYearZero(toDate('2023-09-08')))─┐
│ 2023-09-08 │ 2023-09-08 │
└───────────────────────────────┴──────────────────────────────────────────────────────────────────┘
另请参阅
fromDaysSinceYearZero32
类似于 fromDaysSinceYearZero,但返回 Date32。
age
返回 startdate 和 enddate 之间差异的 unit 组件。 差异计算使用 1 纳秒的精度。 例如,2021-12-29 和 2022-01-01 之间的差异对于 day 单位是 3 天,对于 month 单位是 0 个月,对于 year 单位是 0 年。
对于 age 的替代方案,请参阅函数 date_diff。
语法
age('unit', startdate, enddate, [timezone])
参数
-
unit— 结果的时间间隔类型。 String。 可能的值nanosecond,nanoseconds,nsmicrosecond,microseconds,us,umillisecond,milliseconds,mssecond,seconds,ss,sminute,minutes,mi,nhour,hours,hh,hday,days,dd,dweek,weeks,wk,wwmonth,months,mm,mquarter,quarters,qq,qyear,years,yyyy,yy
-
startdate— 要减去的第一个时间值(被减数)。 Date, Date32, DateTime 或 DateTime64。 -
enddate— 要从中减去第二个时间值(减数)。 Date, Date32, DateTime 或 DateTime64。 -
timezone— 时区名称 (可选)。 如果指定,则应用于startdate和enddate。 如果未指定,则使用startdate和enddate的时区。 如果它们不相同,则结果未指定。 String。
返回值
以 unit 表示的 enddate 和 startdate 之间的差值。 Int。
示例
SELECT age('hour', toDateTime('2018-01-01 22:30:00'), toDateTime('2018-01-02 23:00:00'));
结果
┌─age('hour', toDateTime('2018-01-01 22:30:00'), toDateTime('2018-01-02 23:00:00'))─┐
│ 24 │
└───────────────────────────────────────────────────────────────────────────────────┘
SELECT
toDate('2022-01-01') AS e,
toDate('2021-12-29') AS s,
age('day', s, e) AS day_age,
age('month', s, e) AS month__age,
age('year', s, e) AS year_age;
结果
┌──────────e─┬──────────s─┬─day_age─┬─month__age─┬─year_age─┐
│ 2022-01-01 │ 2021-12-29 │ 3 │ 0 │ 0 │
└────────────┴────────────┴─────────┴────────────┴──────────┘
date_diff
返回在 startdate 和 enddate 之间跨越的指定 unit 边界的计数。 差异使用相对单位计算,例如,2021-12-29 和 2022-01-01 之间的差异对于单位 day 是 3 天(请参阅 toRelativeDayNum),对于单位 month 是 1 个月(请参阅 toRelativeMonthNum),对于单位 year 是 1 年(请参阅 toRelativeYearNum)。
如果指定了单位 week,则 date_diff 假定周从星期一开始。 请注意,此行为与函数 toWeek() 的行为不同,在 toWeek() 中,周默认从星期日开始。
对于 date_diff 的替代方案,请参阅函数 age。
语法
date_diff('unit', startdate, enddate, [timezone])
别名: dateDiff, DATE_DIFF, timestampDiff, timestamp_diff, TIMESTAMP_DIFF。
参数
-
unit— 结果的时间间隔类型。 String。 可能的值nanosecond,nanoseconds,nsmicrosecond,microseconds,us,umillisecond,milliseconds,mssecond,seconds,ss,sminute,minutes,mi,nhour,hours,hh,hday,days,dd,dweek,weeks,wk,wwmonth,months,mm,mquarter,quarters,qq,qyear,years,yyyy,yy
-
startdate— 要减去的第一个时间值(被减数)。 Date, Date32, DateTime 或 DateTime64。 -
enddate— 要从中减去第二个时间值(减数)。 Date, Date32, DateTime 或 DateTime64。 -
timezone— 时区名称 (可选)。 如果指定,则应用于startdate和enddate。 如果未指定,则使用startdate和enddate的时区。 如果它们不相同,则结果未指定。 String。
返回值
以 unit 表示的 enddate 和 startdate 之间的差值。 Int。
示例
SELECT dateDiff('hour', toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00'));
结果
┌─dateDiff('hour', toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00'))─┐
│ 25 │
└────────────────────────────────────────────────────────────────────────────────────────┘
SELECT
toDate('2022-01-01') AS e,
toDate('2021-12-29') AS s,
dateDiff('day', s, e) AS day_diff,
dateDiff('month', s, e) AS month__diff,
dateDiff('year', s, e) AS year_diff;
结果
┌──────────e─┬──────────s─┬─day_diff─┬─month__diff─┬─year_diff─┐
│ 2022-01-01 │ 2021-12-29 │ 3 │ 1 │ 1 │
└────────────┴────────────┴──────────┴─────────────┴───────────┘
date_trunc
将日期和时间数据截断为日期的指定部分。
语法
date_trunc(unit, value[, timezone])
别名: dateTrunc。
参数
-
unit— 用于截断结果的时间间隔类型。 字符串字面量。 可能的值nanosecond- 仅与 DateTime64 兼容microsecond- 仅与 DateTime64 兼容milisecond- 仅与 DateTime64 兼容secondminutehourdayweekmonthquarteryear
unit参数不区分大小写。 -
value— 日期和时间。 Date, Date32, DateTime 或 DateTime64。 -
timezone— 返回值的 时区名称 (可选)。 如果未指定,则该函数使用value参数的时区。 String。
返回值
- 截断为日期的指定部分的值。 DateTime。
示例
不带时区的查询
SELECT now(), date_trunc('hour', now());
结果
┌───────────────now()─┬─date_trunc('hour', now())─┐
│ 2020-09-28 10:40:45 │ 2020-09-28 10:00:00 │
└─────────────────────┴───────────────────────────┘
使用指定的时区查询
SELECT now(), date_trunc('hour', now(), 'Asia/Istanbul');
结果
┌───────────────now()─┬─date_trunc('hour', now(), 'Asia/Istanbul')─┐
│ 2020-09-28 10:46:26 │ 2020-09-28 13:00:00 │
└─────────────────────┴────────────────────────────────────────────┘
另请参阅
date_add
将时间间隔或日期间隔添加到提供的日期或带时间的日期。
如果加法运算导致值超出数据类型的范围,则结果未定义。
语法
date_add(unit, value, date)
备选语法
date_add(date, INTERVAL value unit)
别名: dateAdd, DATE_ADD。
参数
-
unit— 要添加的时间间隔类型。 注意:这不是 String,因此不能用引号引起来。 可能的值secondminutehourdayweekmonthquarteryear
-
value— 要添加的时间间隔的值。 Int。 -
date— 要向其添加value的日期或带时间的日期。 Date, Date32, DateTime 或 DateTime64。
返回值
通过将以 unit 表示的 value 添加到 date 而获得的日期或带时间的日期。 Date, Date32, DateTime 或 DateTime64。
示例
SELECT date_add(YEAR, 3, toDate('2018-01-01'));
结果
┌─plus(toDate('2018-01-01'), toIntervalYear(3))─┐
│ 2021-01-01 │
└───────────────────────────────────────────────┘
SELECT date_add(toDate('2018-01-01'), INTERVAL 3 YEAR);
结果
┌─plus(toDate('2018-01-01'), toIntervalYear(3))─┐
│ 2021-01-01 │
└───────────────────────────────────────────────┘
另请参阅
date_sub
从提供的日期或带时间的日期中减去时间间隔或日期间隔。
如果减法运算导致值超出数据类型的范围,则结果未定义。
语法
date_sub(unit, value, date)
备选语法
date_sub(date, INTERVAL value unit)
别名: dateSub, DATE_SUB。
参数
-
unit— 要减去的时间间隔类型。 注意:这不是 String,因此不能用引号引起来。可能的值
secondminutehourdayweekmonthquarteryear
-
value— 要减去的时间间隔的值。 Int。 -
date— 要从中减去value的日期或带时间的日期。 Date, Date32, DateTime 或 DateTime64。
返回值
通过从 date 中减去以 unit 表示的 value 而获得的日期或带时间的日期。 Date, Date32, DateTime 或 DateTime64。
示例
SELECT date_sub(YEAR, 3, toDate('2018-01-01'));
结果
┌─minus(toDate('2018-01-01'), toIntervalYear(3))─┐
│ 2015-01-01 │
└────────────────────────────────────────────────┘
SELECT date_sub(toDate('2018-01-01'), INTERVAL 3 YEAR);
结果
┌─minus(toDate('2018-01-01'), toIntervalYear(3))─┐
│ 2015-01-01 │
└────────────────────────────────────────────────┘
另请参阅
timestamp_add
将指定的时间值与提供的日期或日期时间值相加。
如果加法运算导致值超出数据类型的范围,则结果未定义。
语法
timestamp_add(date, INTERVAL value unit)
别名: timeStampAdd, TIMESTAMP_ADD。
参数
-
date— 日期或带时间的日期。 Date, Date32, DateTime 或 DateTime64。 -
value— 要添加的时间间隔的值。 Int。 -
unit— 要添加的时间间隔类型。 String。 可能的值secondminutehourdayweekmonthquarteryear
返回值
将以 unit 表示的指定 value 添加到 date 后得到的日期或带时间的日期。 Date, Date32, DateTime 或 DateTime64。
示例
select timestamp_add(toDate('2018-01-01'), INTERVAL 3 MONTH);
结果
┌─plus(toDate('2018-01-01'), toIntervalMonth(3))─┐
│ 2018-04-01 │
└────────────────────────────────────────────────┘
timestamp_sub
从提供的日期或带时间的日期中减去时间间隔。
如果减法运算导致值超出数据类型的范围,则结果未定义。
语法
timestamp_sub(unit, value, date)
别名: timeStampSub, TIMESTAMP_SUB。
参数
-
unit— 要减去的时间间隔类型。 String。 可能的值secondminutehourdayweekmonthquarteryear
-
value— 要减去的时间间隔的值。 Int。 -
date— 日期或带时间的日期。 Date, Date32, DateTime 或 DateTime64。
返回值
通过从 date 中减去以 unit 表示的 value 而获得的日期或带时间的日期。 Date, Date32, DateTime 或 DateTime64。
示例
select timestamp_sub(MONTH, 5, toDateTime('2018-12-18 01:02:03'));
结果
┌─minus(toDateTime('2018-12-18 01:02:03'), toIntervalMonth(5))─┐
│ 2018-07-18 01:02:03 │
└──────────────────────────────────────────────────────────────┘
addDate
将时间间隔添加到提供的日期、带时间的日期或 String 编码的日期/带时间的日期。
如果加法运算导致值超出数据类型的范围,则结果未定义。
语法
addDate(date, interval)
参数
date— 要向其添加interval的日期或带时间的日期。 Date, Date32, DateTime, DateTime64, 或 Stringinterval— 要添加的时间间隔。 Interval。
返回值
通过将 interval 添加到 date 而获得的日期或带时间的日期。 Date, Date32, DateTime 或 DateTime64。
示例
SELECT addDate(toDate('2018-01-01'), INTERVAL 3 YEAR);
结果
┌─addDate(toDate('2018-01-01'), toIntervalYear(3))─┐
│ 2021-01-01 │
└──────────────────────────────────────────────────┘
别名: ADDDATE
另请参阅
subDate
从提供的日期、带时间的日期或 String 编码的日期/带时间的日期中减去时间间隔。
如果减法运算导致值超出数据类型的范围,则结果未定义。
语法
subDate(date, interval)
参数
date— 要从中减去interval的日期或带时间的日期。 Date, Date32, DateTime, DateTime64, 或 Stringinterval— 要减去的时间间隔。 Interval。
返回值
通过从 date 中减去 interval 而获得的日期或带时间的日期。 Date, Date32, DateTime 或 DateTime64。
示例
SELECT subDate(toDate('2018-01-01'), INTERVAL 3 YEAR);
结果
┌─subDate(toDate('2018-01-01'), toIntervalYear(3))─┐
│ 2015-01-01 │
└──────────────────────────────────────────────────┘
别名: SUBDATE
另请参阅
now
返回查询分析时刻的当前日期和时间。 该函数是一个常量表达式。
别名: current_timestamp。
语法
now([timezone])
参数
返回值
- 当前日期和时间。 DateTime。
示例
不带时区的查询
SELECT now();
结果
┌───────────────now()─┐
│ 2020-10-17 07:42:09 │
└─────────────────────┘
使用指定的时区查询
SELECT now('Asia/Istanbul');
结果
┌─now('Asia/Istanbul')─┐
│ 2020-10-17 10:42:23 │
└──────────────────────┘
now64
返回查询分析时刻的具有亚秒精度的当前日期和时间。 该函数是一个常量表达式。
语法
now64([scale], [timezone])
参数
scale- 刻度大小(精度):10-precision 秒。 有效范围:[ 0 : 9 ]。 通常使用 - 3(默认)(毫秒)、6(微秒)、9(纳秒)。timezone— 返回值的 时区名称 (可选)。 String。
返回值
- 具有亚秒精度的当前日期和时间。 DateTime64。
示例
SELECT now64(), now64(9, 'Asia/Istanbul');
结果
┌─────────────────now64()─┬─────now64(9, 'Asia/Istanbul')─┐
│ 2022-08-21 19:34:26.196 │ 2022-08-21 22:34:26.196542766 │
└─────────────────────────┴───────────────────────────────┘
nowInBlock
返回处理每个数据块时刻的当前日期和时间。 与函数 now 相比,它不是一个常量表达式,并且对于长时间运行的查询,返回的值在不同的块中将有所不同。
在长时间运行的 INSERT SELECT 查询中使用此函数生成当前时间是有意义的。
语法
nowInBlock([timezone])
参数
返回值
- 处理每个数据块时刻的当前日期和时间。 DateTime。
示例
SELECT
now(),
nowInBlock(),
sleep(1)
FROM numbers(3)
SETTINGS max_block_size = 1
FORMAT PrettyCompactMonoBlock
结果
┌───────────────now()─┬────────nowInBlock()─┬─sleep(1)─┐
│ 2022-08-21 19:41:19 │ 2022-08-21 19:41:19 │ 0 │
│ 2022-08-21 19:41:19 │ 2022-08-21 19:41:20 │ 0 │
│ 2022-08-21 19:41:19 │ 2022-08-21 19:41:21 │ 0 │
└─────────────────────┴─────────────────────┴──────────┘
today
返回查询分析时刻的当前日期。 它与 ‘toDate(now())’ 相同,并且具有别名:curdate, current_date。
语法
today()
参数
- 无
返回值
- 当前日期。 DateTime。
示例
查询
SELECT today() AS today, curdate() AS curdate, current_date() AS current_date FORMAT Pretty
结果:
在 2024 年 3 月 3 日运行上面的查询将返回以下响应
┏━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ today ┃ curdate ┃ current_date ┃
┡━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ 2024-03-03 │ 2024-03-03 │ 2024-03-03 │
└────────────┴────────────┴──────────────┘
yesterday
接受零个参数,并在查询分析的某个时刻返回昨天的日期。 与 ‘today() - 1’ 相同。
timeSlot
将时间舍入到半小时长度间隔的开始。
语法
timeSlot(time[, time_zone])
参数
time— 要舍入到半小时长度间隔开始的时间。 DateTime/Date32/DateTime64。time_zone— String 类型常量值或表示时区的表达式。 String。
虽然此函数可以接受扩展类型 Date32 和 DateTime64 的值作为参数,但如果传递超出正常范围的时间(Date 为 1970 年到 2149 年 / DateTime 为 2106 年),将产生错误的结果。
返回类型
- 返回舍入到半小时长度间隔开始的时间。 DateTime。
示例
查询
SELECT timeSlot(toDateTime('2000-01-02 03:04:05', 'UTC'));
结果
┌─timeSlot(toDateTime('2000-01-02 03:04:05', 'UTC'))─┐
│ 2000-01-02 03:00:00 │
└────────────────────────────────────────────────────┘
toYYYYMM
将日期或带时间的日期转换为包含年份和月份编号的 UInt32 数字 (YYYY * 100 + MM)。 接受第二个可选的时区参数。 如果提供,则时区必须是字符串常量。
此函数与函数 YYYYMMDDToDate() 相反。
示例
SELECT
toYYYYMM(now(), 'US/Eastern')
结果
┌─toYYYYMM(now(), 'US/Eastern')─┐
│ 202303 │
└───────────────────────────────┘
toYYYYMMDD
将日期或带时间的日期转换为包含年份和月份编号的 UInt32 数字 (YYYY * 10000 + MM * 100 + DD)。 接受第二个可选的时区参数。 如果提供,则时区必须是字符串常量。
示例
SELECT toYYYYMMDD(now(), 'US/Eastern')
结果
┌─toYYYYMMDD(now(), 'US/Eastern')─┐
│ 20230302 │
└─────────────────────────────────┘
toYYYYMMDDhhmmss
将日期或带时间的日期转换为包含年份和月份编号的 UInt64 数字 (YYYY * 10000000000 + MM * 100000000 + DD * 1000000 + hh * 10000 + mm * 100 + ss)。 接受第二个可选的时区参数。 如果提供,则时区必须是字符串常量。
示例
SELECT toYYYYMMDDhhmmss(now(), 'US/Eastern')
结果
┌─toYYYYMMDDhhmmss(now(), 'US/Eastern')─┐
│ 20230302112209 │
└───────────────────────────────────────┘
YYYYMMDDToDate
将包含年份、月份和日期编号的数字转换为 Date。
此函数与函数 toYYYYMMDD() 相反。
如果输入未编码有效的 Date 值,则输出未定义。
语法
YYYYMMDDToDate(yyyymmdd);
参数
返回值
- 从参数创建的日期。 Date。
示例
SELECT YYYYMMDDToDate(20230911);
结果
┌─toYYYYMMDD(20230911)─┐
│ 2023-09-11 │
└──────────────────────┘
YYYYMMDDToDate32
类似于函数 YYYYMMDDToDate(),但生成 Date32。
YYYYMMDDhhmmssToDateTime
将包含年份、月份、日期、小时、分钟和秒数的数字转换为 DateTime。
如果输入未编码有效的 DateTime 值,则输出未定义。
此函数与函数 toYYYYMMDDhhmmss() 相反。
语法
YYYYMMDDhhmmssToDateTime(yyyymmddhhmmss[, timezone]);
参数
返回值
- 从参数创建的带时间的日期。 DateTime。
示例
SELECT YYYYMMDDToDateTime(20230911131415);
结果
┌──────YYYYMMDDhhmmssToDateTime(20230911131415)─┐
│ 2023-09-11 13:14:15 │
└───────────────────────────────────────────────┘
YYYYMMDDhhmmssToDateTime64
类似于函数 YYYYMMDDhhmmssToDate(),但生成 DateTime64。
在 timezone 参数之后接受一个额外的可选 precision 参数。
changeYear
更改日期或日期时间的年份组成部分。
语法
changeYear(date_or_datetime, value)
参数
date_or_datetime- Date, Date32, DateTime 或 DateTime64value- 年份的新值。 Integer。
返回值
- 与
date_or_datetime相同的类型。
示例
SELECT changeYear(toDate('1999-01-01'), 2000), changeYear(toDateTime64('1999-01-01 00:00:00.000', 3), 2000);
结果
┌─changeYear(toDate('1999-01-01'), 2000)─┬─changeYear(toDateTime64('1999-01-01 00:00:00.000', 3), 2000)─┐
│ 2000-01-01 │ 2000-01-01 00:00:00.000 │
└────────────────────────────────────────┴──────────────────────────────────────────────────────────────┘
changeMonth
更改日期或日期时间的月份组成部分。
语法
changeMonth(date_or_datetime, value)
参数
date_or_datetime- Date, Date32, DateTime 或 DateTime64value- 月份的新值。 Integer。
返回值
- 返回与
date_or_datetime相同类型的值。
示例
SELECT changeMonth(toDate('1999-01-01'), 2), changeMonth(toDateTime64('1999-01-01 00:00:00.000', 3), 2);
结果
┌─changeMonth(toDate('1999-01-01'), 2)─┬─changeMonth(toDateTime64('1999-01-01 00:00:00.000', 3), 2)─┐
│ 1999-02-01 │ 1999-02-01 00:00:00.000 │
└──────────────────────────────────────┴────────────────────────────────────────────────────────────┘
changeDay
更改日期或日期时间的天组成部分。
语法
changeDay(date_or_datetime, value)
参数
date_or_datetime- Date, Date32, DateTime 或 DateTime64value- 天的新值。 Integer。
返回值
- 返回与
date_or_datetime相同类型的值。
示例
SELECT changeDay(toDate('1999-01-01'), 5), changeDay(toDateTime64('1999-01-01 00:00:00.000', 3), 5);
结果
┌─changeDay(toDate('1999-01-01'), 5)─┬─changeDay(toDateTime64('1999-01-01 00:00:00.000', 3), 5)─┐
│ 1999-01-05 │ 1999-01-05 00:00:00.000 │
└────────────────────────────────────┴──────────────────────────────────────────────────────────┘
changeHour
更改日期或日期时间的小时组成部分。
语法
changeHour(date_or_datetime, value)
参数
date_or_datetime- Date, Date32, DateTime 或 DateTime64value- 小时的新值。 Integer。
返回值
- 返回与
date_or_datetime相同类型的值。 如果输入是 Date,则返回 DateTime。 如果输入是 Date32,则返回 DateTime64。
示例
SELECT changeHour(toDate('1999-01-01'), 14), changeHour(toDateTime64('1999-01-01 00:00:00.000', 3), 14);
结果
┌─changeHour(toDate('1999-01-01'), 14)─┬─changeHour(toDateTime64('1999-01-01 00:00:00.000', 3), 14)─┐
│ 1999-01-01 14:00:00 │ 1999-01-01 14:00:00.000 │
└──────────────────────────────────────┴────────────────────────────────────────────────────────────┘
changeMinute
更改日期或日期时间的分钟组成部分。
语法
changeMinute(date_or_datetime, value)
参数
date_or_datetime- Date, Date32, DateTime 或 DateTime64value- 分钟的新值。 Integer。
返回值
- 返回与
date_or_datetime相同类型的值。 如果输入是 Date,则返回 DateTime。 如果输入是 Date32,则返回 DateTime64。
示例
SELECT changeMinute(toDate('1999-01-01'), 15), changeMinute(toDateTime64('1999-01-01 00:00:00.000', 3), 15);
结果
┌─changeMinute(toDate('1999-01-01'), 15)─┬─changeMinute(toDateTime64('1999-01-01 00:00:00.000', 3), 15)─┐
│ 1999-01-01 00:15:00 │ 1999-01-01 00:15:00.000 │
└────────────────────────────────────────┴──────────────────────────────────────────────────────────────┘
changeSecond
更改日期或日期时间的秒组成部分。
语法
changeSecond(date_or_datetime, value)
参数
date_or_datetime- Date, Date32, DateTime 或 DateTime64value- 秒的新值。 整数。
返回值
- 返回与
date_or_datetime相同类型的值。 如果输入是 Date,则返回 DateTime。 如果输入是 Date32,则返回 DateTime64。
示例
SELECT changeSecond(toDate('1999-01-01'), 15), changeSecond(toDateTime64('1999-01-01 00:00:00.000', 3), 15);
结果
┌─changeSecond(toDate('1999-01-01'), 15)─┬─changeSecond(toDateTime64('1999-01-01 00:00:00.000', 3), 15)─┐
│ 1999-01-01 00:00:15 │ 1999-01-01 00:00:15.000 │
└────────────────────────────────────────┴──────────────────────────────────────────────────────────────┘
addYears
为日期、日期时间或字符串编码的日期/日期时间添加指定的年数。
语法
addYears(date, num)
参数
返回值
- 返回
date加上num年。 日期/Date32/DateTime/DateTime64。
示例
WITH
toDate('2024-01-01') AS date,
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
addYears(date, 1) AS add_years_with_date,
addYears(date_time, 1) AS add_years_with_date_time,
addYears(date_time_string, 1) AS add_years_with_date_time_string
┌─add_years_with_date─┬─add_years_with_date_time─┬─add_years_with_date_time_string─┐
│ 2025-01-01 │ 2025-01-01 00:00:00 │ 2025-01-01 00:00:00.000 │
└─────────────────────┴──────────────────────────┴─────────────────────────────────┘
addQuarters
为日期、日期时间或字符串编码的日期/日期时间添加指定的季度数。
语法
addQuarters(date, num)
参数
返回值
- 返回
date加上num季度。 日期/Date32/DateTime/DateTime64。
示例
WITH
toDate('2024-01-01') AS date,
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
addQuarters(date, 1) AS add_quarters_with_date,
addQuarters(date_time, 1) AS add_quarters_with_date_time,
addQuarters(date_time_string, 1) AS add_quarters_with_date_time_string
┌─add_quarters_with_date─┬─add_quarters_with_date_time─┬─add_quarters_with_date_time_string─┐
│ 2024-04-01 │ 2024-04-01 00:00:00 │ 2024-04-01 00:00:00.000 │
└────────────────────────┴─────────────────────────────┴────────────────────────────────────┘
addMonths
为日期、日期时间或字符串编码的日期/日期时间添加指定的月数。
语法
addMonths(date, num)
参数
返回值
- 返回
date加上num月。 日期/Date32/DateTime/DateTime64。
示例
WITH
toDate('2024-01-01') AS date,
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
addMonths(date, 6) AS add_months_with_date,
addMonths(date_time, 6) AS add_months_with_date_time,
addMonths(date_time_string, 6) AS add_months_with_date_time_string
┌─add_months_with_date─┬─add_months_with_date_time─┬─add_months_with_date_time_string─┐
│ 2024-07-01 │ 2024-07-01 00:00:00 │ 2024-07-01 00:00:00.000 │
└──────────────────────┴───────────────────────────┴──────────────────────────────────┘
addWeeks
为日期、日期时间或字符串编码的日期/日期时间添加指定的周数。
语法
addWeeks(date, num)
参数
返回值
- 返回
date加上num周。 日期/Date32/DateTime/DateTime64。
示例
WITH
toDate('2024-01-01') AS date,
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
addWeeks(date, 5) AS add_weeks_with_date,
addWeeks(date_time, 5) AS add_weeks_with_date_time,
addWeeks(date_time_string, 5) AS add_weeks_with_date_time_string
┌─add_weeks_with_date─┬─add_weeks_with_date_time─┬─add_weeks_with_date_time_string─┐
│ 2024-02-05 │ 2024-02-05 00:00:00 │ 2024-02-05 00:00:00.000 │
└─────────────────────┴──────────────────────────┴─────────────────────────────────┘
addDays
为日期、日期时间或字符串编码的日期/日期时间添加指定的天数。
语法
addDays(date, num)
参数
返回值
- 返回
date加上num天。 日期/Date32/DateTime/DateTime64。
示例
WITH
toDate('2024-01-01') AS date,
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
addDays(date, 5) AS add_days_with_date,
addDays(date_time, 5) AS add_days_with_date_time,
addDays(date_time_string, 5) AS add_days_with_date_time_string
┌─add_days_with_date─┬─add_days_with_date_time─┬─add_days_with_date_time_string─┐
│ 2024-01-06 │ 2024-01-06 00:00:00 │ 2024-01-06 00:00:00.000 │
└────────────────────┴─────────────────────────┴────────────────────────────────┘
addHours
为日期、日期时间或字符串编码的日期/日期时间添加指定的天数。
语法
addHours(date, num)
参数
返回值 o
- 返回
date加上num小时。 日期/Date32/DateTime/DateTime64。
示例
WITH
toDate('2024-01-01') AS date,
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
addHours(date, 12) AS add_hours_with_date,
addHours(date_time, 12) AS add_hours_with_date_time,
addHours(date_time_string, 12) AS add_hours_with_date_time_string
┌─add_hours_with_date─┬─add_hours_with_date_time─┬─add_hours_with_date_time_string─┐
│ 2024-01-01 12:00:00 │ 2024-01-01 12:00:00 │ 2024-01-01 12:00:00.000 │
└─────────────────────┴──────────────────────────┴─────────────────────────────────┘
addMinutes
为日期、日期时间或字符串编码的日期/日期时间添加指定的分钟数。
语法
addMinutes(date, num)
参数
返回值
- 返回
date加上num分钟。 日期/Date32/DateTime/DateTime64。
示例
WITH
toDate('2024-01-01') AS date,
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
addMinutes(date, 20) AS add_minutes_with_date,
addMinutes(date_time, 20) AS add_minutes_with_date_time,
addMinutes(date_time_string, 20) AS add_minutes_with_date_time_string
┌─add_minutes_with_date─┬─add_minutes_with_date_time─┬─add_minutes_with_date_time_string─┐
│ 2024-01-01 00:20:00 │ 2024-01-01 00:20:00 │ 2024-01-01 00:20:00.000 │
└───────────────────────┴────────────────────────────┴───────────────────────────────────┘
addSeconds
为日期、日期时间或字符串编码的日期/日期时间添加指定的秒数。
语法
addSeconds(date, num)
参数
返回值
- 返回
date加上num秒。 日期/Date32/DateTime/DateTime64。
示例
WITH
toDate('2024-01-01') AS date,
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
addSeconds(date, 30) AS add_seconds_with_date,
addSeconds(date_time, 30) AS add_seconds_with_date_time,
addSeconds(date_time_string, 30) AS add_seconds_with_date_time_string
┌─add_seconds_with_date─┬─add_seconds_with_date_time─┬─add_seconds_with_date_time_string─┐
│ 2024-01-01 00:00:30 │ 2024-01-01 00:00:30 │ 2024-01-01 00:00:30.000 │
└───────────────────────┴────────────────────────────┴───────────────────────────────────┘
addMilliseconds
为日期时间或字符串编码的日期时间添加指定的毫秒数。
语法
addMilliseconds(date_time, num)
参数
date_time: 要添加指定毫秒数的日期时间。 DateTime/DateTime64, String。num: 要添加的毫秒数。 (U)Int*, Float*。
返回值
- 返回
date_time加上num毫秒。 DateTime64。
示例
WITH
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
addMilliseconds(date_time, 1000) AS add_milliseconds_with_date_time,
addMilliseconds(date_time_string, 1000) AS add_milliseconds_with_date_time_string
┌─add_milliseconds_with_date_time─┬─add_milliseconds_with_date_time_string─┐
│ 2024-01-01 00:00:01.000 │ 2024-01-01 00:00:01.000 │
└─────────────────────────────────┴────────────────────────────────────────┘
addMicroseconds
为日期时间或字符串编码的日期时间添加指定的微秒数。
语法
addMicroseconds(date_time, num)
参数
date_time: 要添加指定微秒数的日期时间。 DateTime/DateTime64, String。num: 要添加的微秒数。 (U)Int*, Float*。
返回值
- 返回
date_time加上num微秒。 DateTime64。
示例
WITH
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
addMicroseconds(date_time, 1000000) AS add_microseconds_with_date_time,
addMicroseconds(date_time_string, 1000000) AS add_microseconds_with_date_time_string
┌─add_microseconds_with_date_time─┬─add_microseconds_with_date_time_string─┐
│ 2024-01-01 00:00:01.000000 │ 2024-01-01 00:00:01.000000 │
└─────────────────────────────────┴────────────────────────────────────────┘
addNanoseconds
为日期时间或字符串编码的日期时间添加指定的微秒数。
语法
addNanoseconds(date_time, num)
参数
- 为日期时间或字符串编码的日期时间添加指定的纳秒数。
date_time: 要添加指定纳秒数的日期时间。 DateTime/DateTime64, String。
返回值
示例
WITH
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
addNanoseconds(date_time, 1000) AS add_nanoseconds_with_date_time,
addNanoseconds(date_time_string, 1000) AS add_nanoseconds_with_date_time_string
┌─add_nanoseconds_with_date_time─┬─add_nanoseconds_with_date_time_string─┐
│ 2024-01-01 00:00:00.000001000 │ 2024-01-01 00:00:00.000001000 │
└────────────────────────────────┴───────────────────────────────────────┘
返回 date_time 加上 num 纳秒。 DateTime64。
addInterval
语法
addInterval(interval_1, interval_2)
参数
返回值
interval_2: 要添加的第二个间隔。 interval。
示例
查询
SELECT addInterval(INTERVAL 1 DAY, INTERVAL 1 MONTH);
SELECT addInterval((INTERVAL 1 DAY, INTERVAL 1 YEAR), INTERVAL 1 MONTH);
SELECT addInterval(INTERVAL 2 DAY, INTERVAL 1 DAY);
结果
┌─addInterval(toIntervalDay(1), toIntervalMonth(1))─┐
│ (1,1) │
└───────────────────────────────────────────────────┘
┌─addInterval((toIntervalDay(1), toIntervalYear(1)), toIntervalMonth(1))─┐
│ (1,1,1) │
└────────────────────────────────────────────────────────────────────────┘
┌─addInterval(toIntervalDay(2), toIntervalDay(1))─┐
│ (3) │
└─────────────────────────────────────────────────┘
相同类型的间隔将合并为单个间隔。 例如,如果传递 toIntervalDay(1) 和 toIntervalDay(2),则结果将是 (3) 而不是 (1,1)。
addTupleOfIntervals
语法
addTupleOfIntervals(interval_1, interval_2)
参数
- 将间隔元组连续添加到日期或日期时间。
date: 第一个间隔或间隔元组。 date/date32/datetime/datetime64。
返回值
示例
查询
WITH toDate('2018-01-01') AS date
SELECT addTupleOfIntervals(date, (INTERVAL 1 DAY, INTERVAL 1 MONTH, INTERVAL 1 YEAR))
结果
┌─addTupleOfIntervals(date, (toIntervalDay(1), toIntervalMonth(1), toIntervalYear(1)))─┐
│ 2019-02-02 │
└──────────────────────────────────────────────────────────────────────────────────────┘
返回添加了 intervals 的 date。 date/date32/datetime/datetime64。
subtractYears
语法
subtractYears(date, num)
参数
- 从日期、日期时间或字符串编码的日期/日期时间中减去指定的年数。
date: 要从中减去指定年数的日期/日期时间。 日期/Date32/DateTime/DateTime64, String。
返回值
示例
WITH
toDate('2024-01-01') AS date,
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
subtractYears(date, 1) AS subtract_years_with_date,
subtractYears(date_time, 1) AS subtract_years_with_date_time,
subtractYears(date_time_string, 1) AS subtract_years_with_date_time_string
┌─subtract_years_with_date─┬─subtract_years_with_date_time─┬─subtract_years_with_date_time_string─┐
│ 2023-01-01 │ 2023-01-01 00:00:00 │ 2023-01-01 00:00:00.000 │
└──────────────────────────┴───────────────────────────────┴──────────────────────────────────────┘
返回 date 减去 num 年。 日期/Date32/DateTime/DateTime64。
subtractQuarters
语法
subtractQuarters(date, num)
参数
- 从日期、日期时间或字符串编码的日期/日期时间中减去指定的季度数。
date: 要从中减去指定季度数的日期/日期时间。 日期/Date32/DateTime/DateTime64, String。
返回值
示例
WITH
toDate('2024-01-01') AS date,
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
subtractQuarters(date, 1) AS subtract_quarters_with_date,
subtractQuarters(date_time, 1) AS subtract_quarters_with_date_time,
subtractQuarters(date_time_string, 1) AS subtract_quarters_with_date_time_string
┌─subtract_quarters_with_date─┬─subtract_quarters_with_date_time─┬─subtract_quarters_with_date_time_string─┐
│ 2023-10-01 │ 2023-10-01 00:00:00 │ 2023-10-01 00:00:00.000 │
└─────────────────────────────┴──────────────────────────────────┴─────────────────────────────────────────┘
返回 date 减去 num 季度。 日期/Date32/DateTime/DateTime64。
subtractMonths
语法
subtractMonths(date, num)
参数
- 从日期、日期时间或字符串编码的日期/日期时间中减去指定的月数。
date: 要从中减去指定月数的日期/日期时间。 日期/Date32/DateTime/DateTime64, String。
返回值
示例
WITH
toDate('2024-01-01') AS date,
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
subtractMonths(date, 1) AS subtract_months_with_date,
subtractMonths(date_time, 1) AS subtract_months_with_date_time,
subtractMonths(date_time_string, 1) AS subtract_months_with_date_time_string
┌─subtract_months_with_date─┬─subtract_months_with_date_time─┬─subtract_months_with_date_time_string─┐
│ 2023-12-01 │ 2023-12-01 00:00:00 │ 2023-12-01 00:00:00.000 │
└───────────────────────────┴────────────────────────────────┴───────────────────────────────────────┘
返回 date 减去 num 月。 日期/Date32/DateTime/DateTime64。
subtractWeeks
语法
subtractWeeks(date, num)
参数
- 从日期、日期时间或字符串编码的日期/日期时间中减去指定的周数。
date: 要从中减去指定周数的日期/日期时间。 日期/Date32/DateTime/DateTime64, String。
返回值
示例
WITH
toDate('2024-01-01') AS date,
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
subtractWeeks(date, 1) AS subtract_weeks_with_date,
subtractWeeks(date_time, 1) AS subtract_weeks_with_date_time,
subtractWeeks(date_time_string, 1) AS subtract_weeks_with_date_time_string
┌─subtract_weeks_with_date─┬─subtract_weeks_with_date_time─┬─subtract_weeks_with_date_time_string─┐
│ 2023-12-25 │ 2023-12-25 00:00:00 │ 2023-12-25 00:00:00.000 │
└──────────────────────────┴───────────────────────────────┴──────────────────────────────────────┘
返回 date 减去 num 周。 日期/Date32/DateTime/DateTime64。
subtractDays
语法
subtractDays(date, num)
参数
- 从日期、日期时间或字符串编码的日期/日期时间中减去指定的天数。
date: 要从中减去指定天数的日期/日期时间。 日期/Date32/DateTime/DateTime64, String。
返回值
示例
WITH
toDate('2024-01-01') AS date,
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
subtractDays(date, 31) AS subtract_days_with_date,
subtractDays(date_time, 31) AS subtract_days_with_date_time,
subtractDays(date_time_string, 31) AS subtract_days_with_date_time_string
┌─subtract_days_with_date─┬─subtract_days_with_date_time─┬─subtract_days_with_date_time_string─┐
│ 2023-12-01 │ 2023-12-01 00:00:00 │ 2023-12-01 00:00:00.000 │
└─────────────────────────┴──────────────────────────────┴─────────────────────────────────────┘
返回 date 减去 num 天。 日期/Date32/DateTime/DateTime64。
subtractHours
语法
subtractHours(date, num)
参数
- 从日期、日期时间或字符串编码的日期/日期时间中减去指定的小时数。
date: 要从中减去指定小时数的日期/日期时间。 日期/Date32/Datetime/Datetime64, String。
返回值
示例
WITH
toDate('2024-01-01') AS date,
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
subtractHours(date, 12) AS subtract_hours_with_date,
subtractHours(date_time, 12) AS subtract_hours_with_date_time,
subtractHours(date_time_string, 12) AS subtract_hours_with_date_time_string
┌─subtract_hours_with_date─┬─subtract_hours_with_date_time─┬─subtract_hours_with_date_time_string─┐
│ 2023-12-31 12:00:00 │ 2023-12-31 12:00:00 │ 2023-12-31 12:00:00.000 │
└──────────────────────────┴───────────────────────────────┴──────────────────────────────────────┘
返回 date 减去 num 小时。 日期/Date32/Datetime/DateTime64。
subtractMinutes
语法
subtractMinutes(date, num)
参数
- 从日期、日期时间或字符串编码的日期/日期时间中减去指定的分钟数。
date: 要从中减去指定分钟数的日期/日期时间。 日期/Date32/DateTime/DateTime64, String。
返回值
示例
WITH
toDate('2024-01-01') AS date,
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
subtractMinutes(date, 30) AS subtract_minutes_with_date,
subtractMinutes(date_time, 30) AS subtract_minutes_with_date_time,
subtractMinutes(date_time_string, 30) AS subtract_minutes_with_date_time_string
┌─subtract_minutes_with_date─┬─subtract_minutes_with_date_time─┬─subtract_minutes_with_date_time_string─┐
│ 2023-12-31 23:30:00 │ 2023-12-31 23:30:00 │ 2023-12-31 23:30:00.000 │
└────────────────────────────┴─────────────────────────────────┴────────────────────────────────────────┘
返回 date 减去 num 分钟。 日期/Date32/DateTime/DateTime64。
subtractSeconds
语法
subtractSeconds(date, num)
参数
- 从日期、日期时间或字符串编码的日期/日期时间中减去指定的秒数。
date: 要从中减去指定秒数的日期/日期时间。 日期/Date32/DateTime/DateTime64, String。
返回值
示例
WITH
toDate('2024-01-01') AS date,
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
subtractSeconds(date, 60) AS subtract_seconds_with_date,
subtractSeconds(date_time, 60) AS subtract_seconds_with_date_time,
subtractSeconds(date_time_string, 60) AS subtract_seconds_with_date_time_string
┌─subtract_seconds_with_date─┬─subtract_seconds_with_date_time─┬─subtract_seconds_with_date_time_string─┐
│ 2023-12-31 23:59:00 │ 2023-12-31 23:59:00 │ 2023-12-31 23:59:00.000 │
└────────────────────────────┴─────────────────────────────────┴────────────────────────────────────────┘
返回 date 减去 num 秒。 日期/Date32/DateTime/DateTime64。
subtractMilliseconds
语法
subtractMilliseconds(date_time, num)
参数
- 从日期时间或字符串编码的日期时间中减去指定的毫秒数。
date_time: 要从中减去指定毫秒数的日期时间。 DateTime/DateTime64, String。
返回值
示例
WITH
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
subtractMilliseconds(date_time, 1000) AS subtract_milliseconds_with_date_time,
subtractMilliseconds(date_time_string, 1000) AS subtract_milliseconds_with_date_time_string
┌─subtract_milliseconds_with_date_time─┬─subtract_milliseconds_with_date_time_string─┐
│ 2023-12-31 23:59:59.000 │ 2023-12-31 23:59:59.000 │
└──────────────────────────────────────┴─────────────────────────────────────────────┘
返回 date_time 减去 num 毫秒。 DateTime64。
subtractMicroseconds
语法
subtractMicroseconds(date_time, num)
参数
- 从日期时间或字符串编码的日期时间中减去指定的微秒数。
date_time: 要从中减去指定微秒数的日期时间。 DateTime/DateTime64, String。
返回值
示例
WITH
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
subtractMicroseconds(date_time, 1000000) AS subtract_microseconds_with_date_time,
subtractMicroseconds(date_time_string, 1000000) AS subtract_microseconds_with_date_time_string
┌─subtract_microseconds_with_date_time─┬─subtract_microseconds_with_date_time_string─┐
│ 2023-12-31 23:59:59.000000 │ 2023-12-31 23:59:59.000000 │
└──────────────────────────────────────┴─────────────────────────────────────────────┘
返回 date_time 减去 num 微秒。 DateTime64。
subtractNanoseconds
语法
subtractNanoseconds(date_time, num)
参数
- 从日期时间或字符串编码的日期时间中减去指定的纳秒数。
date_time: 要从中减去指定纳秒数的日期时间。 DateTime/DateTime64, String。
返回值
示例
WITH
toDateTime('2024-01-01 00:00:00') AS date_time,
'2024-01-01 00:00:00' AS date_time_string
SELECT
subtractNanoseconds(date_time, 1000) AS subtract_nanoseconds_with_date_time,
subtractNanoseconds(date_time_string, 1000) AS subtract_nanoseconds_with_date_time_string
┌─subtract_nanoseconds_with_date_time─┬─subtract_nanoseconds_with_date_time_string─┐
│ 2023-12-31 23:59:59.999999000 │ 2023-12-31 23:59:59.999999000 │
└─────────────────────────────────────┴────────────────────────────────────────────┘
返回 date_time 减去 num 纳秒。 DateTime64。
subtractInterval
语法
subtractInterval(interval_1, interval_2)
参数
返回值
interval_2: 要添加的第二个间隔。 interval。
interval_2: 要取反的第二个间隔。 interval。
示例
查询
SELECT subtractInterval(INTERVAL 1 DAY, INTERVAL 1 MONTH);
SELECT subtractInterval((INTERVAL 1 DAY, INTERVAL 1 YEAR), INTERVAL 1 MONTH);
SELECT subtractInterval(INTERVAL 2 DAY, INTERVAL 1 DAY);
结果
┌─subtractInterval(toIntervalDay(1), toIntervalMonth(1))─┐
│ (1,-1) │
└────────────────────────────────────────────────────────┘
┌─subtractInterval((toIntervalDay(1), toIntervalYear(1)), toIntervalMonth(1))─┐
│ (1,1,-1) │
└─────────────────────────────────────────────────────────────────────────────┘
┌─subtractInterval(toIntervalDay(2), toIntervalDay(1))─┐
│ (1) │
└──────────────────────────────────────────────────────┘
相同类型的间隔将合并为单个间隔。 例如,如果传递 toIntervalDay(2) 和 toIntervalDay(1),则结果将是 (1) 而不是 (2,1)。
subtractTupleOfIntervals
语法
subtractTupleOfIntervals(interval_1, interval_2)
参数
- 从日期或日期时间中连续减去间隔元组。
date: 第一个间隔或间隔元组。 Date/Date32/DateTime/DateTime64。
返回值
示例
查询
WITH toDate('2018-01-01') AS date SELECT subtractTupleOfIntervals(date, (INTERVAL 1 DAY, INTERVAL 1 YEAR))
结果
┌─subtractTupleOfIntervals(date, (toIntervalDay(1), toIntervalYear(1)))─┐
│ 2016-12-31 │
└───────────────────────────────────────────────────────────────────────┘
返回减去 intervals 的 date。 Date/Date32/DateTime/DateTime64。
timeSlots
语法
timeSlots(StartTime, Duration,\[, Size\])
示例
SELECT timeSlots(toDateTime('2012-01-01 12:20:00'), toUInt32(600));
SELECT timeSlots(toDateTime('1980-12-12 21:01:02', 'UTC'), toUInt32(600), 299);
SELECT timeSlots(toDateTime64('1980-12-12 21:01:02.1234', 4, 'UTC'), toDecimal64(600.1, 1), toDecimal64(299, 0));
结果
┌─timeSlots(toDateTime('2012-01-01 12:20:00'), toUInt32(600))─┐
│ ['2012-01-01 12:00:00','2012-01-01 12:30:00'] │
└─────────────────────────────────────────────────────────────┘
┌─timeSlots(toDateTime('1980-12-12 21:01:02', 'UTC'), toUInt32(600), 299)─┐
│ ['1980-12-12 20:56:13','1980-12-12 21:01:12','1980-12-12 21:06:11'] │
└─────────────────────────────────────────────────────────────────────────┘
┌─timeSlots(toDateTime64('1980-12-12 21:01:02.1234', 4, 'UTC'), toDecimal64(600.1, 1), toDecimal64(299, 0))─┐
│ ['1980-12-12 20:56:13.0000','1980-12-12 21:01:12.0000','1980-12-12 21:06:11.0000'] │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────┘
对于从 ‘StartTime’ 开始并持续 ‘Duration’ 秒的时间间隔,它返回时间点的数组,这些时间点由该间隔中的点向下舍入到 ‘Size’ 秒组成。 ‘Size’ 是一个可选参数,默认设置为 1800(30 分钟)。 这对于例如在相应的会话中搜索页面浏览量是必要的。 接受 DateTime 和 DateTime64 作为 ‘StartTime’ 参数。 对于 DateTime,‘Duration’ 和 ‘Size’ 参数必须是 UInt32。 对于 ‘DateTime64’,它们必须是 Decimal64。 返回 DateTime/DateTime64 数组(返回类型与 ‘StartTime’ 的类型匹配)。 对于 DateTime64,返回值的小数位数可能与 ‘StartTime’ 的小数位数不同 --- 采用所有给定参数中的最高小数位数。
formatDateTime
根据给定的格式字符串格式化时间。 格式是一个常量表达式,因此单个结果列不能有多种格式。
formatDateTime 使用 MySQL datetime 格式样式,请参阅 https://dev.mysqlserver.cn/doc/refman/8.0/en/date-and-time-functions.html#function_date-format。
此函数的相反操作是 parseDateTime。
语法
formatDateTime(Time, Format[, Timezone])
别名: DATE_FORMAT。
返回值
根据确定的格式返回时间和日期值。
替换字段
使用替换字段,您可以为结果字符串定义模式。 “示例”列显示了 2018-01-02 22:33:44 的格式化结果。 | 占位符 | 示例 |
|---|---|---|
| 描述 | %a | 缩写的工作日名称 (Mon-Sun) |
| %b | 缩写的月份名称 (Jan-Dec) | Jan |
| %c | 月份作为整数 (01-12),请参阅下面的“注意 4” | 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 | 小数秒,请参阅下面的“注意 1”和“注意 2” | 123456 |
| %F | 简短的 YYYY-MM-DD 日期,等效于 %Y-%m-%d | 2018-01-02 |
| %g | 两位数年份格式,与 ISO 8601 对齐,从四位数表示法缩写 | 18 |
| %G | ISO 周数的四位数年份格式,从 ISO 8601 定义 的基于周的年份计算,通常仅与 %V 一起使用 | 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),请参阅“注意 4” | 14 |
| %l | 12 小时制的小时 (01-12),请参阅“注意 4” | 09 |
| %m | 月份作为整数 (01-12) | 01 |
| %M | 完整的月份名称 (January-December),请参阅“注意 3” | January |
| %n | 换行符 (‘’) | |
| %p | AM 或 PM 指示 | PM |
| %Q | 季度 (1-4) | 1 |
| %r | 12 小时制 HH:MMAM/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) | 星期一 |
| %y | 年份,最后两位数字 (00-99) | 18 |
| %Y | 年份 | 2018 |
| %z | UTC 的时间偏移,格式为 +HHMM 或 -HHMM | -0500 |
| %% | 百分号 % | % |
注意 1:在低于 v23.4 的 ClickHouse 版本中,如果格式化的值是 Date、Date32 或 DateTime(它们没有小数秒)或精度为 0 的 DateTime64,则 %f 打印单个零 (0)。 可以使用设置 formatdatetime_f_prints_single_zero = 1 恢复之前的行为。
注意 2:在低于 v25.1 的 ClickHouse 版本中,%f 打印的位数与 DateTime64 的小数位数指定的一样多,而不是固定的 6 位数字。 可以使用设置 formatdatetime_f_prints_scale_number_of_digits= 1 恢复之前的行为。
注意 3:在低于 v23.4 的 ClickHouse 版本中,%M 打印分钟 (00-59) 而不是完整的月份名称 (January-December)。 可以使用设置 formatdatetime_parsedatetime_m_is_month_name = 0 恢复之前的行为。
注意 4:在低于 v23.11 的 ClickHouse 版本中,函数 parseDateTime() 需要格式化程序 %c(月份)和 %l/%k(小时)的前导零,例如 07。 在更高版本中,可以省略前导零,例如 7。 可以使用设置 parsedatetime_parse_without_leading_zeros = 0 恢复之前的行为。 请注意,函数 formatDateTime() 默认情况下仍然为 %c 和 %l/%k 打印前导零,以避免破坏现有的用例。 可以通过设置 formatdatetime_format_without_leading_zeros = 1 来更改此行为。
示例
SELECT formatDateTime(toDate('2010-01-04'), '%g')
结果
┌─formatDateTime(toDate('2010-01-04'), '%g')─┐
│ 10 │
└────────────────────────────────────────────┘
SELECT formatDateTime(toDateTime64('2010-01-04 12:34:56.123456', 7), '%f')
结果
┌─formatDateTime(toDateTime64('2010-01-04 12:34:56.123456', 7), '%f')─┐
│ 1234560 │
└─────────────────────────────────────────────────────────────────────┘
此外,formatDateTime 函数可以接受第三个 String 参数,其中包含时区名称。 示例:Asia/Istanbul。 在这种情况下,时间将根据指定的时区进行格式化。
示例
SELECT
now() AS ts,
time_zone,
formatDateTime(ts, '%T', time_zone) AS str_tz_time
FROM system.time_zones
WHERE time_zone LIKE 'Europe%'
LIMIT 10
┌──────────────────ts─┬─time_zone─────────┬─str_tz_time─┐
│ 2023-09-08 19:13:40 │ Europe/Amsterdam │ 21:13:40 │
│ 2023-09-08 19:13:40 │ Europe/Andorra │ 21:13:40 │
│ 2023-09-08 19:13:40 │ Europe/Astrakhan │ 23:13:40 │
│ 2023-09-08 19:13:40 │ Europe/Athens │ 22:13:40 │
│ 2023-09-08 19:13:40 │ Europe/Belfast │ 20:13:40 │
│ 2023-09-08 19:13:40 │ Europe/Belgrade │ 21:13:40 │
│ 2023-09-08 19:13:40 │ Europe/Berlin │ 21:13:40 │
│ 2023-09-08 19:13:40 │ Europe/Bratislava │ 21:13:40 │
│ 2023-09-08 19:13:40 │ Europe/Brussels │ 21:13:40 │
│ 2023-09-08 19:13:40 │ Europe/Bucharest │ 22:13:40 │
└─────────────────────┴───────────────────┴─────────────┘
另请参阅
formatDateTimeInJodaSyntax
类似于 formatDateTime,不同之处在于它以 Joda 样式而不是 MySQL 样式格式化日期时间。 请参阅 https://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html。
此函数的相反操作是 parseDateTimeInJodaSyntax。
根据确定的格式返回时间和日期值。
使用替换字段,您可以为结果字符串定义模式。
使用替换字段,您可以为结果字符串定义模式。 “示例”列显示了 2018-01-02 22:33:44 的格式化结果。 | 占位符 | 表示 | 示例 |
|---|---|---|---|
| G | 纪元 | 文本 | AD |
| C | 世纪 (>=0) | 数字 | 20 |
| Y | 纪元年 (>=0) | year | 1996 |
| x | weekyear (尚不支持) | year | 1996 |
| w | week of weekyear (尚不支持) | 数字 | 27 |
| e | 星期几 | 数字 | 2 |
| E | 星期几 | 文本 | Tuesday; Tue |
| y | year | year | 1996 |
| D | 一年中的第几天 | 数字 | 189 |
| M | 一年中的月份 | month | 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 | 时区偏移 | zone | -0800; -0812 |
| ' | 文本转义符 | 分隔符 | |
| '' | 单引号 | 字面值 | ' |
示例
SELECT formatDateTimeInJodaSyntax(toDateTime('2010-01-04 12:34:56'), 'yyyy-MM-dd HH:mm:ss')
结果
┌─formatDateTimeInJodaSyntax(toDateTime('2010-01-04 12:34:56'), 'yyyy-MM-dd HH:mm:ss')─┐
│ 2010-01-04 12:34:56 │
└─────────────────────────────────────────────────────────────────────────────────────────┘
dateName
返回日期的指定部分。
语法
dateName(date_part, date)
参数
date_part— 日期部分。 可能的值:'year'、'quarter'、'month'、'week'、'dayofyear'、'day'、'weekday'、'hour'、'minute'、'second'。 String。date— 日期。 Date, Date32, DateTime 或 DateTime64。timezone— 时区。 可选。 String。
返回值
- 日期的指定部分。 String
示例
WITH toDateTime('2021-04-14 11:22:33') AS date_value
SELECT
dateName('year', date_value),
dateName('month', date_value),
dateName('day', date_value);
结果
┌─dateName('year', date_value)─┬─dateName('month', date_value)─┬─dateName('day', date_value)─┐
│ 2021 │ April │ 14 │
└──────────────────────────────┴───────────────────────────────┴─────────────────────────────┘
monthName
返回月份的名称。
语法
monthName(date)
参数
date— 日期或日期时间。 Date, DateTime 或 DateTime64。
返回值
- 月份的名称。 String
示例
WITH toDateTime('2021-04-14 11:22:33') AS date_value
SELECT monthName(date_value);
结果
┌─monthName(date_value)─┐
│ April │
└───────────────────────┘
fromUnixTimestamp
此函数将 Unix 时间戳转换为日历日期和一天中的时间。
它可以通过两种方式调用
当给定 Integer 类型的单个参数时,它返回 DateTime 类型的值,即行为类似于 toDateTime。
别名: FROM_UNIXTIME。
示例
SELECT fromUnixTimestamp(423543535);
结果
┌─fromUnixTimestamp(423543535)─┐
│ 1983-06-04 10:58:55 │
└──────────────────────────────┘
当给定两个或三个参数时,如果第一个参数是 Integer, Date, Date32, DateTime 或 DateTime64 类型的值,第二个参数是常量格式字符串,第三个参数是可选的常量时区字符串,则该函数返回 String 类型的值,即它的行为类似于 formatDateTime。在这种情况下,使用 MySQL 的 datetime 格式风格。
示例
SELECT fromUnixTimestamp(1234334543, '%Y-%m-%d %R:%S') AS DateTime;
结果
┌─DateTime────────────┐
│ 2009-02-11 14:42:23 │
└─────────────────────┘
另请参阅
fromUnixTimestampInJodaSyntax
与 fromUnixTimestamp 相同,但以第二种方式(两个或三个参数)调用时,格式化将使用 Joda 风格 而不是 MySQL 风格。
示例
SELECT fromUnixTimestampInJodaSyntax(1234334543, 'yyyy-MM-dd HH:mm:ss', 'UTC') AS DateTime;
结果
┌─DateTime────────────┐
│ 2009-02-11 06:42:23 │
└─────────────────────┘
toModifiedJulianDay
将 YYYY-MM-DD 文本形式的 前格里高利历 日期转换为 Int32 类型的 修正儒略日 数字。此函数支持从 0000-01-01 到 9999-12-31 的日期。如果参数无法解析为日期,或者日期无效,则会引发异常。
语法
toModifiedJulianDay(date)
参数
date— 文本形式的日期。 String 或 FixedString。
返回值
- 修正儒略日数字。 Int32。
示例
SELECT toModifiedJulianDay('2020-01-01');
结果
┌─toModifiedJulianDay('2020-01-01')─┐
│ 58849 │
└───────────────────────────────────┘
toModifiedJulianDayOrNull
与 toModifiedJulianDay() 类似,但它返回 NULL 而不是引发异常。
语法
toModifiedJulianDayOrNull(date)
参数
date— 文本形式的日期。 String 或 FixedString。
返回值
- 修正儒略日数字。 Nullable(Int32)。
示例
SELECT toModifiedJulianDayOrNull('2020-01-01');
结果
┌─toModifiedJulianDayOrNull('2020-01-01')─┐
│ 58849 │
└─────────────────────────────────────────┘
fromModifiedJulianDay
将 修正儒略日 数字转换为 YYYY-MM-DD 文本形式的 前格里高利历 日期。此函数支持从 -678941 到 2973483 的日期数字(分别代表 0000-01-01 和 9999-12-31)。如果日期数字超出支持范围,则会引发异常。
语法
fromModifiedJulianDay(day)
参数
day— 修正儒略日数字。 任何整型。
返回值
- 文本形式的日期。 String
示例
SELECT fromModifiedJulianDay(58849);
结果
┌─fromModifiedJulianDay(58849)─┐
│ 2020-01-01 │
└──────────────────────────────┘
fromModifiedJulianDayOrNull
与 fromModifiedJulianDayOrNull() 类似,但它返回 NULL 而不是引发异常。
语法
fromModifiedJulianDayOrNull(day)
参数
day— 修正儒略日数字。 任何整型。
返回值
- 文本形式的日期。 Nullable(String)
示例
SELECT fromModifiedJulianDayOrNull(58849);
结果
┌─fromModifiedJulianDayOrNull(58849)─┐
│ 2020-01-01 │
└────────────────────────────────────┘
toUTCTimestamp
将 DateTime/DateTime64 类型值从其他时区转换为 UTC 时区时间戳。此函数主要为了与 Apache Spark 和类似框架兼容而包含。
语法
toUTCTimestamp(time_val, time_zone)
参数
time_val— DateTime/DateTime64 类型常量值或表达式。 DateTime/DateTime64 类型time_zone— String 类型常量值或表示时区的表达式。 String 类型
返回值
- 文本形式的 DateTime/DateTime64
示例
SELECT toUTCTimestamp(toDateTime('2023-03-16'), 'Asia/Shanghai');
结果
┌─toUTCTimestamp(toDateTime('2023-03-16'), 'Asia/Shanghai')┐
│ 2023-03-15 16:00:00 │
└─────────────────────────────────────────────────────────┘
fromUTCTimestamp
将 DateTime/DateTime64 类型值从 UTC 时区转换为其他时区时间戳。此函数主要为了与 Apache Spark 和类似框架兼容而包含。
语法
fromUTCTimestamp(time_val, time_zone)
参数
time_val— DateTime/DateTime64 类型常量值或表达式。 DateTime/DateTime64 类型time_zone— String 类型常量值或表示时区的表达式。 String 类型
返回值
- 文本形式的 DateTime/DateTime64
示例
SELECT fromUTCTimestamp(toDateTime64('2023-03-16 10:00:00', 3), 'Asia/Shanghai');
结果
┌─fromUTCTimestamp(toDateTime64('2023-03-16 10:00:00',3), 'Asia/Shanghai')─┐
│ 2023-03-16 18:00:00.000 │
└─────────────────────────────────────────────────────────────────────────┘
UTCTimestamp
返回查询分析时刻的当前日期和时间。 该函数是一个常量表达式。
此函数给出与 now('UTC') 相同的结果。它仅为支持 MySQL 而添加,建议使用 now。
语法
UTCTimestamp()
别名:UTC_timestamp。
返回值
- 返回查询分析时刻的当前日期和时间。 DateTime。
示例
查询
SELECT UTCTimestamp();
结果
┌──────UTCTimestamp()─┐
│ 2024-05-28 08:32:09 │
└─────────────────────┘
timeDiff
返回两个日期或带时间值的日期之间的差异。差异以秒为单位计算。它与 dateDiff 相同,仅为支持 MySQL 而添加。建议使用 dateDiff。
语法
timeDiff(first_datetime, second_datetime)
参数*
first_datetime— DateTime/DateTime64 类型常量值或表达式。 DateTime/DateTime64 类型second_datetime— DateTime/DateTime64 类型常量值或表达式。 DateTime/DateTime64 类型
返回值
两个日期或带时间值的日期之间的差异,以秒为单位。
示例
查询
timeDiff(toDateTime64('1927-01-01 00:00:00', 3), toDate32('1927-01-02'));
结果:
┌─timeDiff(toDateTime64('1927-01-01 00:00:00', 3), toDate32('1927-01-02'))─┐
│ 86400 │
└──────────────────────────────────────────────────────────────────────────┘