# 日期/时间函数

# 时区

返回当前会话的时区,即设置会话时区的值。如果在分布式表的上下文中执行该函数,则会生成一个具有与每个分片相关的值的普通列,否则会生成一个常量值。

timeZone()

别名

   `timezone`。

返回值

  • 时区。
  • 类型:字符串。

示例

SELECT timeZone()
┌─timezone()─────┐
│ America/Denver │
└────────────────┘

# makeDate

从年、月和日参数创建一个日期

makeDate(year, month, day);

别名

MAKEDATE(year, month, day);

参数

  • year — 年。整数、浮点数或十进制数。
  • month — 月。整数、浮点数或十进制数。
  • day — 日。整数、浮点数或十进制数。

返回值

  • 从参数创建的日期。
  • 类型:日期。

示例

SELECT makeDate(2023, 2, 28) AS Date;
┌───────date─┐
│ 2023-02-28 │
└────────────┘

# makeDateTime

从年、月、日、小时、分钟和秒参数创建一个日期时间。

makeDateTime(year, month, day, hour, minute, second[, timezone])

参数

  • year — 年。整数、浮点数或十进制数。
  • month — 月。整数、浮点数或十进制数。
  • day — 日。整数、浮点数或十进制数。
  • hour — 小时。整数、浮点数或十进制数。
  • minute — 分钟。整数、浮点数或十进制数。
  • second — 秒。整数、浮点数或十进制数。
  • timezone — 返回值的时区(可选)。

返回值

  • 从参数创建的带有时间的日期。
  • 类型:日期时间。

示例

SELECT makeDateTime(2023, 2, 28, 17, 12, 33) AS DateTime;
┌────────────DateTime─┐
│ 2023-02-28 17:12:33 │
└─────────────────────┘

# toTimeZone

将日期或带有时间的日期转换为指定的时区。不会改变数据的内部值(Unix 秒数),只会改变值的时区属性和值的字符串表示形式。

toTimezone(value, timezone)

别名

toTimezone

参数

  • value — 时间或日期和时间。DateTime64。
  • timezone — 返回值的时区。字符串。此参数是常量,因为 toTimezone 改变列的时区(时区是 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

# 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 FORMAT Vertical;
Row 1:
──────
dt_str:          2017-11-05 08:07:47
from_str:        1509840467
from_str_tokyo:  1509836867
from_datetime:   1509840467
from_datetime64: 1509840467