时间日期函数
支持时区。
所有的时间日期函数都可以在第二个可选参数中接受时区参数。示例:Asia / Yekaterinburg。在这种情况下,它们使用指定的时区而不是本地(默认)时区。
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 │
└─────────────────────┴────────────┴────────────┴─────────────────────┘
仅支持与UTC相差一整小时的时区。
timeZone
返回服务器的时区。 如果它在分布式表的上下文中执行,那么它会生成一个普通列,其中包含与每个分片相关的值。否则它会产生一个常数值。
语法
timeZone()
别名:timezone
。
返回值
- 时区。
类型为: String。
toTimeZone
将Date或DateTime转换为指定的时区。 时区是Date/DateTime类型的属性。 表字段或结果集的列的内部值(秒数)不会更改,列的类型会更改,并且其字符串表示形式也会相应更改。
语法
toTimezone(value, timezone)
别名:toTimezone
。
参数
value
— 时间或日期和时间。类型为DateTime64。timezone
— 返回值的时区。类型为 String。 这个参数是一个常量,因为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
toTimeZone(time_utc, 'Asia/Yekaterinburg')
把 DateTime('UTC')
类型转换为 DateTime('Asia/Yekaterinburg')
. 内部值 (Unixtimestamp) 1546300800 保持不变, 但是 字符串表示(toString() 函数的结果值) 由 time_utc: 2019-01-01 00:00:00
转换为o time_yekat: 2019-01-01 05:00:00
.
timeZoneOf
返回DateTime或者DateTime64数据类型的时区名称。
语法
timeZoneOf(value)
别名: timezoneOf
。
参数
value
— 日期和时间。类型为DateTime或者DateTime64。