注:所有的时间日期函数都可以在第二个可选参数中接受时区参数。示例:Asia / Yekaterinburg。在这种情况下,它们使用指定的时区而不是本地(默认)时区。
SELECTtoDateTime('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() //202004toYYYYMMDD() //20200401toYYYYMMDDhhmmss() //20200401172540dateDiff()......
SELECTtoDateTime('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);
获取未来时间的函数:
-- 第一种,日期格式(指定日期,需注意时区的问题)WITHtoDate('2019-09-09') AS date,toDateTime('2019-09-09 00:00:00') AS date_timeSELECTaddYears(date, 1) AS add_years_with_date,addYears(date_time, 0) AS add_years_with_date_time;-- 第二种,日期格式(当前,本地时间)WITHtoDate(now()) as date,toDateTime(now()) as date_timeSELECTnow() 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;
获取过去时间的函数:
WITHtoDate(now()) as date,toDateTime(now()) as date_timeSELECTsubtractYears(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;
计算连个时刻在不同时间单位下的差值
-- 第一种:指定时间计算差值示例WITHtoDateTime('2019-07-30 10:10:10', 'Asia/Shanghai') as date_shanghai_one,toDateTime('2020-10-31 11:20:30', 'Asia/Shanghai') as date_shanghai_twoSELECTdateDiff('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;-- 第二种:本地当前时间示例WITHnow() as date_time, -- 当前时间toStartOfMonth(date_time) as start_of_month, -- 月初addDays(addMonths(start_of_month, 1), -1) as end_of_month, -- 月末addMonths(start_of_month, 1) as next_start_of_month, -- 下个月初addDays(addMonths(next_start_of_month, 1), -1) as next_end_of_month -- 下个月末SELECT date_time,start_of_month,end_of_month,next_start_of_month,next_end_of_month,dateDiff('day', start_of_month, next_start_of_month) as month_diff_days, -- 当月天数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 -- 相差秒数;
