天天看點

Clickhouse之常用函數操作

常用函數彙總

[日期]

注:所有的時間日期函數都可以在第二個可選參數中接受時區參數。示例:Asia / Yekaterinburg。在這種情況下,它們使用指定的時區而不是本地(預設)時區。

now()         // 2022-08-08 17:19:00  取目前時間
toYear()      // 2022                             取日志中的年份
toMonth()  // 8                                   取日子中的月份
today()      // 2022-08-08                   今天的日期
yesterday()  // 2022-08-07                昨天的日期
toDayOfYear()  // 100                         取一年中的第幾天
toDayOfWeek()  // 1                           取一周中的第幾天
toHour()           17                              取小時
toMinute()      22                                取分鐘
toSecond()    33                                 取秒
toStartOfYear()    2022-01-01              取一年中的第一天
toStartOfMonth()   2022-08-01           取當月的第一天
toStartOfQuarter(time),



formatDatetime(now(), '%Y-%m-%d')   // 2022-08-08  指定時間格式
toYYYYMM()                              //202004              
toYYYYMMDD()                            //20200401
toYYYYMMDDhhmmss()                      //20200401172540


toUnixTimestamp(time)              将datetime格式轉換成Unix時間戳
toQuarter(time)                       季度(一年分為四個季度。1(一季度:1-3),2(二季度:4-6),3(三季度:7-9),4(四季度:10-12))      

  

未來日期:

-- 第一種,日期格式(指定日期,需注意時區的問題)
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;      

計算時間內插補點:

-- 第一種:指定時間計算內插補點示例
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