ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Clickhouse 时间日期函数

2021-09-06 10:30:21  阅读:608  来源: 互联网

标签:函数 -- dateDiff shanghai add 日期 time date Clickhouse


Clickhouse 时间日期函数



    注:所有的时间日期函数都可以在第二个可选参数中接受时区参数。示例: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 │
    └─────────────────────┴────────────┴────────────┴─────────────────────┘


常用时间函数:

    now()                // 2020-04-01 17:25:40     取当前时间
    toYear()             // 2020                    取日期中的年份
    toMonth()            // 4                       取日期中的月份
    today()              // 2020-04-01              今天的日期
    yesterday()          // 2020-03-31              昨天的额日期
    toDayOfYear()        // 92                      取一年中的第几天
    toDayOfWeek()        // 3                       取一周中的第几天
    toHour()             //17                       取小时
    toMinute()           //25                       取分钟
    toSecond()           //40                       取秒
    toStartOfYear()      //2020-01-01               取一年中的第一天
    toStartOfMonth()     //2020-04-01               取当月的第一天

    formatDateTime(now(),'%Y-%m-%d')        // 2020*04-01         指定时间格式
    toYYYYMM()                              //202004
    toYYYYMMDD()                            //20200401
    toYYYYMMDDhhmmss()                      //20200401172540
    dateDiff()
    ......

    SELECT
        toDateTime('2019-07-30 10:10:10') AS time,

        -- 将DateTime转换成Unix时间戳
        toUnixTimestamp(time) as unixTimestamp,

        -- 保留 时-分-秒
        toDate(time) as date_local,
        toTime(time) as date_time,   -- 将DateTime中的日期转换为一个固定的日期,同时保留时间部分。

        -- 获取年份,月份,季度,小时,分钟,秒钟
        toYear(time) as get_year,
        toMonth(time) as get_month,

        -- 一年分为四个季度。1(一季度:1-3),2(二季度:4-6),3(三季度:7-9),4(四季度:10-12)
        toQuarter(time) as get_quarter,
        toHour(time) as get_hour,
        toMinute(time) as get_minute,
        toSecond(time) as get_second,

        -- 获取 DateTime中的当前日期是当前年份的第几天,当前月份的第几日,当前星期的周几
        toDayOfYear(time) as "当前年份中的第几天",
        toDayOfMonth(time) as "当前月份的第几天",
        toDayOfWeek(time) as "星期",
        toDate(time, 'Asia/Shanghai') AS date_shanghai,
        toDateTime(time, 'Asia/Shanghai') AS time_shanghai,

        -- 得到当前年份的第一天,当前月份的第一天,当前季度的第一天,当前日期的开始时刻
        toStartOfYear(time),
        toStartOfMonth(time),
        toStartOfQuarter(time),
        toStartOfDay(time) AS cur_start_daytime,
        toStartOfHour(time) as cur_start_hour,
        toStartOfMinute(time) AS cur_start_minute,

        -- 从过去的某个固定的时间开始,以此得到当前指定的日期的编号
        toRelativeYearNum(time),
        toRelativeQuarterNum(time);

获取未来时间的函数:

    -- 第一种,日期格式(指定日期,需注意时区的问题)
    WITH
        toDate('2019-09-09') AS date,
        toDateTime('2019-09-09 00:00:00') AS date_time
    SELECT
        addYears(date, 1) AS add_years_with_date,
        addYears(date_time, 0) AS add_years_with_date_time;

    -- 第二种,日期格式(当前,本地时间)
    WITH
        toDate(now()) as date,
        toDateTime(now()) as date_time
    SELECT
        now() as now_time,-- 当前时间
        -- 之后1年
        addYears(date, 1) AS add_years_with_date,
        addYears(date_time, 1) AS add_years_with_date_time,

        -- 之后1月
        addMonths(date, 1) AS add_months_with_date,
        addMonths(date_time, 1) AS add_months_with_date_time,

        --之后1周
        addWeeks(date, 1) AS add_weeks_with_date,
        addWeeks(date_time, 1) AS add_weeks_with_date_time,

        -- 之后1天
        addDays(date, 1) AS add_days_with_date,
        addDays(date_time, 1) AS add_days_with_date_time,

        --之后1小时
        addHours(date_time, 1) AS add_hours_with_date_time,

        --之后1分中
        addMinutes(date_time, 1) AS add_minutes_with_date_time,

        -- 之后10秒钟
        addSeconds(date_time, 10) AS add_seconds_with_date_time,

         -- 之后1个季度
        addQuarters(date, 1) AS add_quarters_with_date,
        addQuarters(date_time, 1) AS add_quarters_with_date_time;

获取过去时间的函数:

    WITH
        toDate(now()) as date,
        toDateTime(now()) as date_time
    SELECT
        subtractYears(date, 1) AS subtract_years_with_date,
        subtractYears(date_time, 1) AS subtract_years_with_date_time,
        subtractQuarters(date, 1) AS subtract_Quarters_with_date,
        subtractQuarters(date_time, 1) AS subtract_Quarters_with_date_time,
        subtractMonths(date, 1) AS subtract_Months_with_date,
        subtractMonths(date_time, 1) AS subtract_Months_with_date_time,
        subtractWeeks(date, 1) AS subtract_Weeks_with_date,
        subtractWeeks(date_time, 1) AS subtract_Weeks_with_date_time,
        subtractDays(date, 1) AS subtract_Days_with_date,
        subtractDays(date_time, 1) AS subtract_Days_with_date_time,
        subtractHours(date_time, 1) AS subtract_Hours_with_date_time,
        subtractMinutes(date_time, 1) AS subtract_Minutes_with_date_time,
        subtractSeconds(date_time, 1) AS subtract_Seconds_with_date_time;

    SELECT toDate('2019-07-31', 'Asia/GuangZhou') as date_guangzhou;
    SELECT toDate('2019-07-31'), toDate('2019-07-31', 'Asia/Beijing') as date_beijing;

    -- 亚洲只能加载上海的timezone???
    SELECT toDateTime('2019-07-31 10:10:10', 'Asia/Shanghai') as date_shanghai;

计算连个时刻在不同时间单位下的差值

    -- 第一种:指定时间计算差值示例
    **WITH
        toDateTime('2019-07-30 10:10:10', 'Asia/Shanghai') as date_shanghai_one,
        toDateTime('2020-10-31 11:20:30', 'Asia/Shanghai') as date_shanghai_two
    SELECT
        dateDiff('year', date_shanghai_one, date_shanghai_two) as diff_years,
        dateDiff('month', date_shanghai_one, date_shanghai_two) as diff_months,
        dateDiff('week', date_shanghai_one, date_shanghai_two) as diff_week,
        dateDiff('day', date_shanghai_one, date_shanghai_two) as diff_days,
        dateDiff('hour', date_shanghai_one, date_shanghai_two) as diff_hours,
        dateDiff('minute', date_shanghai_one, date_shanghai_two) as diff_minutes,
        dateDiff('second', date_shanghai_one, date_shanghai_two) as diff_seconds;**

    -- 第二种:本地当前时间示例
    WITH
        now() as date_time
    SELECT
        dateDiff('year', date_time, addYears(date_time, 1)) as diff_years,
        dateDiff('month', date_time, addMonths(date_time, 2)) as diff_months,
        dateDiff('week', date_time, addWeeks(date_time, 3)) as diff_week,
        dateDiff('day', date_time, addDays(date_time, 3)) as diff_days,
        dateDiff('hour', date_time, addHours(date_time, 3)) as diff_hours,
        dateDiff('minute', date_time, addMinutes(date_time, 30)) as diff_minutes,
        dateDiff('second', date_time, addSeconds(date_time, 35)) as diff_seconds;

标签:函数,--,dateDiff,shanghai,add,日期,time,date,Clickhouse
来源: https://blog.csdn.net/yueyue__/article/details/120128642

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有