# 日期/时间函数
# 时区
返回当前会话的时区,即设置会话时区的值。如果在分布式表的上下文中执行该函数,则会生成一个具有与每个分片相关的值的普通列,否则会生成一个常量值。
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