Clickhouse时间⽇期函数实战总结
注:所有的时间⽇期函数都可以在第⼆个可选参数中接受时区参数。⽰例:Asia / Yekaterinburg。在这种情况下,它们使⽤指定的时区⽽不是本地(默认)时区。仅⽀持与UTC相差⼀整⼩时的时区。
localhost :)select toDateTime(146600280)AS time,toDateTime(146600280,'Asia/Yekaterinburg')AS time_asia,toDateTime(146600280,'US/Samoa')AS ti me_us,toDate(146600280)AS date_local,toDate(146600280,'Asia/Yekaterinburg')AS date_asia,toDate(146600280,'US/Samoa')AS date_us;
SELECT
toDateTime(146600280)AS time,
toDateTime(146600280,'Asia/Yekaterinburg')AS time_asia,
toDateTime(146600280,'US/Samoa')AS time_us,
toDate(146600280)AS date_local,
toDate(146600280,'Asia/Yekaterinburg')AS date_asia,
toDate(146600280,'US/Samoa')AS date_us
Query id: 72b99150-a308-4495-afdd-2f123e0e877c
┌────────────────time─┬───────────time_asia─┬─────────────time_us─┬─date_local─┬──date_asia─┬────date_us─┐
│1974-08-2502:18:00│1974-08-2423:18:00│1974-08-2407:18:00│1974-08-25│1974-08-24│1974-08-24│
└─────────────────────┴─────────────────────┴─────────────────────┴────────────┴────────────┴────────────┘
1rows in set. Elapsed: 0.004 sec.
toDateTime() yyyy-MM-dd HH:mm:ss时间函数
toDateTime()时间函数返回的时间格式为yyyy-MM-dd HH:mm:ss
toDateTime(x)
toDateTime(x)参数x可以是字符串类型也可以是数字类型。
localhost :)select toDateTime('1466002800')AS time;
SELECT toDateTime('1466002800')AS time
Query id: 8b7e7816-d382-4140-be1b-a83b2741b0d2
┌────────────────time─┐
│2016-06-1523:00:00│
└─────────────────────┘
1rows in set. Elapsed: 0.006 sec.
localhost :)select toDateTime(1466002800)AS time;
SELECT toDateTime(1466002800)AS time
Query id: 56718b03-3796-4c82-8705-9c8d05404be3
┌────────────────time─┐
│2016-06-1523:00:00│
└─────────────────────┘
1rows in set. Elapsed: 0.002 sec.
同样,toDateTime(x)x的格式可以是时间戳也可以是时间格式的字符串。
localhost :)select toDateTime('2016-06-15 23:00:00')AS time, toUnixTimestamp(time)as unixTimestamp;
SELECT
toDateTime('2016-06-15 23:00:00')AS time,
toUnixTimestamp(time)AS unixTimestamp
Query id: c3870bf8-2b1c-4754-bcf8-e86a5c4a410c
┌────────────────time─┬─unixTimestamp─┐
│2016-06-1523:00:00│1466002800│
└─────────────────────┴───────────────┘
1rows in set. Elapsed: 0.003 sec.
toUnixTimestamp()
toUnixTimestamp()时间戳函数中的参数类型可以是String类型可以是DateTime类型
localhost :)select toDateTime('2016-06-15 23:00:00')AS time, toUnixTimestamp('2016-06-15 23:00:00')as unixTimestamp,toUnixTimestamp(time)as uni xTimestamp1;
SELECT
toDateTime('2016-06-15 23:00:00')AS time,
toUnixTimestamp('2016-06-15 23:00:00')AS unixTimestamp,
toUnixTimestamp(time)AS unixTimestamp1
Query id: c947aed8-e63c-45d7-bd5d-e2c9fbd5c4cb
┌────────────────time─┬─unixTimestamp─┬─unixTimestamp1─┐
│2016-06-1523:00:00│1466002800│1466002800│
└─────────────────────┴───────────────┴────────────────┘
1rows in set. Elapsed: 0.003 sec.
toDate() yyyy-MM-dd⽇期函数
toDate()⽇期函数返回的⽇期格式yyyy-MM-dd。
localhost :)select toDate(146600280)AS date_local,toDate(146600280,'Asia/Yekaterinburg')AS date_asia,toDate(146600280,'US/Samoa')AS date_us;
SELECT
toDate(146600280)AS date_local,
toDate(146600280,'Asia/Yekaterinburg')AS date_asia,
toDate(146600280,'US/Samoa')AS date_us
Query id: 1704f699-fb96-484b-9b87-d5cdf4215fdc
┌─date_local─┬──date_asia─┬────date_us─┐
│1974-08-25│1974-08-24│1974-08-24│
└────────────┴────────────┴────────────┘
1rows in set. Elapsed: 0.003 sec.
toDate()⽇期函数参数类型为String类型或时间戳类型或DateTime类型。
localhost :)select toDateTime('2016-06-15 23:00:00')AS time, toDate(time)AS date,toDate('2016-06-15 23:00:00')AS date1,toDate(1466002800)AS date 2;
SELECT
toDateTime('2016-06-15 23:00:00')AS time,
toDate(time)AS date,
toDate('2016-06-15 23:00:00')AS date1,
toDate(1466002800)AS date2
Query id: ac06c8d0-94bf-4ac0-8efb-b722ec70cb15
┌────────────────time─┬───────date─┬──────date1─┬──────date2─┐
│2016-06-1523:00:00│2016-06-15│2016-06-15│2016-06-15│
└─────────────────────┴────────────┴────────────┴────────────┘
1rows in set. Elapsed: 0.003 sec.
toTime() 返回时间格式yyyy-MM-dd HH:mm:ss
toTime()虽然返回的时间格式是yyyy-MM-dd HH:mm:ss,但是只有HH:mm:ss部分是准确的,但是yyyy-MM-dd虽然不准确但是是固定的⽇期。
localhost :)SELECT toDateTime('2019-07-30 10:10:10')AS time,toTime(time)AS date_time,now()AS now,toTime(now)AS date_time1;
SELECT
toDateTime('2019-07-30 10:10:10')AS time,
toTime(time)AS date_time,
now()AS now,
toTime(now)AS date_time1
Query id: 9f3472dc-acda-4922-ad2f-29fd61309337
┌────────────────time─┬───────────date_time─┬─────────────────now─┬──────────date_time1─┐
│2019-07-3010:10:10│1970-01-0210:10:10│2020-12-1015:39:53│1970-01-0215:39:53│
└─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘
toTimeZone()将时间或⽇期和时间转换为指定的时区的时间
将时间或⽇期和时间转换为指定的时区。时区是Date / DateTime类型的属性。表字段或结果集的列的内部值(秒数)不会更改,列的类型会更改,并且其字符串表⽰形式也会相应更改。
localhost :)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;
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
Query id: 50109e98-f402-4b12-b155-8ff3097d601e
Row1:
──────
time_utc: 2019-01-0100:00:00
type_utc: DateTime('UTC')
int32utc: 1546300800
time_yekat: 2019-01-0105:00:00
type_yekat: DateTime('Asia/Yekaterinburg')
int32yekat: 1546300800
time_samoa: 2018-12-3113:00:00
type_samoa: DateTime('US/Samoa')
int32samoa: 1546300800
1rows in set. Elapsed: 0.012 sec.
toTimeZone(time_utc, 'Asia/Yekaterinburg')将DateTime('UTC')类型更改为DateTime('Asia/Yekaterinb
urg')。值(Unixtimestamp)1546300800保持不变,但是字符串表⽰形式(toString()函数的结果)从更改time_utc: 2019-01-01 00:00:00为time_yekat: 2019-01-01 05:00:00。
取当前⽇期和时间
today()取当前⽇期,等价于CURRENT_DATE(),时间格式yyyy-MM-dd。
now()取当前时间,等价于CURRENT_TIMSTAMP(),时间格式yyyy-MM-dd HH:mm:ss。
localhost :)select toDateTime(now())AS time, toDate(time)AS date,toDate(now())AS date1,toDate(now())AS date2,toTime(now())AS time1, toDateTime( today())AS time2,today()AS today,now()AS now;
SELECT
toDateTime(now())AS time,
toDate(time)AS date,
toDate(now())AS date1,
toDate(now())AS date2,
toTime(now())AS time1,
toDateTime(today())AS time2,
today()AS today,
now()AS now
Query id: 861cecaa-f7b1-4895-936a-88939bf0ad0c
┌────────────────time─┬───────date─┬──────date1─┬──────date2─┬───────────────time1─┬───────────────time2─┬──────today─┬─────────────────now─┐
│2020-12-1015:30:25│2020-12-10│2020-12-10│2020-12-10│1970-01-0215:30:25│2020-12-1000:00:00│2020-12-10│2020-12-1015:30:25│└─────────────────────┴────────────┴────────────┴────────────┴─────────────────────┴─────────────────────┴────────────┴─────────────────────┘
1rows in set. Elapsed: 0.003 sec.
取昨⽇⽇期
yesterday()返回昨天的⽇期,⽇期格式:yyyy-MM-dd。
localhost :)select yesterday();
SELECT yesterday()
Query id: 0c8e1d69-4414-4604-92e7-7f112f6fed6e
┌─yesterday()─┐
│2020-12-09│
└─────────────┘
1rows in set. Elapsed: 0.002 sec.
获取当前时间中的年、季度、⽉、⽇、时、分、秒。
toYear(now())获取当前时间所属的年份,
unix时间戳转换日期格式toMonth(now())获取当前时间所属的⽉份,
toQuarter(now())获取当前时间的⽉份所属的季度,
toHour(now())获取当前时间的⼩时部分,
toMinute(now())获取当前时间的分钟部分,
toSecond(now())获取当前时间的秒钟部分。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论