0


Clickhouse时间日期函数一文详解+代码展示


前言

Clickhouse是一个面向联机分析处理(OLAP)的开源的面向列式存储的DBMS,简称CK, 与Hadoop, Spark相比,ClickHouse很轻量级,由俄罗斯第一大搜索引擎Yandex于2016年6月发布, 开发语言为C++。主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。

时间在数据库中经常作为时间索引,在数据入库和出库以及更新的时候都需要变化。在一些指标计算或者是提取某段时间的数据时,都会根据数据库中的时间索引数据进行操作。因此很大一部分我们操作数据都得先从时间数据下手,但是想要真正提取到我们想要的时间作为索引,还需要我们掌握许多功能函数方便我们操作,这是一个比较复杂的运用过程。因此特地写下这篇文章,记录一些十分好用常用的处理Clickhouse数据库SQL时间数据的函数,以及实例运用这些函数完成一些复杂查询任务。希望能够帮助到正在看此博文的各位,如果还有什么问题解决不了尽请在评论区提出,博主会一一作答。

关于MySQL的时间函数可以看博主的前篇文章相当详细了:

一文速学-玩转MySQL时间运算函数以及时间匹配操作详解+实例代码

一文速学-玩转MySQL时间选取各类函数操作详解+实例代码

一文速学-玩转MySQL获取时间、格式转换各类操作方法详解


一、时间函数

和MySQL时间函数有些不同,但是时间函数的功能是一样的,这里把常用的时间函数给出,效果以实际代码运行结果为准:
函数效果描述now()2022-07-13 14:28:33取当前时间toUnixTimestamp(now())1657695998获取当前时间戳toYear(now())2022取日期中的年份toMonth(now())7取日期中的月份today()2022-07-13今天的日期toDate(now())2022-07-13取日期中的日期yesterday()2022-07-12昨天的日期toQuarter(now())3获取当前日期季度toDayOfMonth(now())13当前月份的天数toDayOfYear(now())194日期化为天数toDayOfWeek(now())3获取星期几toMonday(now())2022-07-11当前周的第一天toHour(now())14取日期时间中的小时toMinute(now())42取日期时间中的分钟toSecond(now())40取日期时间中的秒toStartOfQuarter(now())2022-07-01当前季度的第一天toStartOfMinute(now())2022-07-13 14:57:00当前起始分钟时间toStartOfHour(now())2022-07-13 14:00:00当前起始小时时间toStartOfDay(now())2022-07-13 00:00:00当天起始时间toStartOfYear(now())2022-01-01当前年份的第一天toStartOfMonth(now())2022-07-01当前月份的第一天

1.取当前时间

now()

SELECT
    now() AS time

today()

SELECT
    today() AS time

获取当前时间戳

SELECT
    toUnixTimestamp(now()) AS time

2.取年月日季度

toYear()

SELECT
    toYeara(now()) AS time

toMonth()

SELECT
    toMonth(now()) AS time

toDayOfMonth()

SELECT
    toDayOfMonth(now()) AS time

获取季度toQuarter()

SELECT
    toQuarter(now()) AS time

out:3

3.日期转化

日期化为天数

SELECT
    toDayOfYear(now()) AS time

当天日期所在当月周数

SELECT
    toDayOfWeek(now()) AS time

4.获取起始时间

获取当前时间的起始时间toStartOfDay(now()):

SELECT
    toStartOfDay(now()) AS time

格式就是这样的格式,大家跟着前面那种表来对就没问题。

二、时间格式转换函数

1.formatDateTime(<时间数据>,'format格式')

format格式:
格式描述%a星期名缩写%b月名缩写%c代表几月的数值%D带时序后缀的数值-天%d天数,数值(00-31)%e天数,数值(0-31)%f微秒%H小时 (00-23)%h小时 (01-12)%I小时 (01-12)%i分钟,数值(00-59)%j转换为天数 (001-366)%k小时 (0-23)%l小时 (1-12)%M分钟,数值(00-59)%m月,数值(00-12)%pAM 或 PM%r时间,12-小时(hh:mm:ss AM 或 PM)%S秒(00-59)%s秒(00-59)%T时间, 24-小时 (hh:mm:ss)%U从年初首周开始计算 (00-53) 星期日是一周的第一天%u从年初首周开始计算 (00-53) 星期一是一周的第一天%V周 (01-53) 星期日是一周的第一天,与 %X 使用%v周 (01-53) 星期一是一周的第一天,与 %x 使用%W星期名%w当前周的天数,(0=星期日, 6=星期六)%X年,其中的星期日是周的第一天,4 位,与 %V 使用%x年,其中的星期一是周的第一天,4 位,与 %v 使用%Y年,4 位%y年,2 位
用法代码:

SELECT
    formatDateTime(now(),'%Y-%m-%d')AS time

可以根据format格式自由组合。

2.toYYYYMM()类型

该类型有三个:
格式结果toYYYYMM()202207toYYYYMMDD()20220713toYYYYMMDDhhmmss()20220713154017

化为时间戳形式toUnixTimestamp():

SELECT
    toUnixTimestamp(now()) AS time

三、时间数据类型转换

toDateTime()

SELECT
    toDateTime('2022-07-13 14:28:33') AS time

将可识别为日期时间的字符串转化为具体时间。

toDate()

SELECT
    toDate('2022-07-13 14:28:33') AS time

将可识别为日期的字符串转化为具体日期

四、时间运算函数

1.interval

interval关键字是和MySQL是一样的,大家不清楚的可以去看:

一文速学-玩转MySQL中INTERVAL关键字和INTERVAL()函数用法讲解

很简单就可以进行时间加减:

SELECT
    toDate('2022-07-13 14:28:33')-interval 3 day AS time

2.add增加时间

和MySQL的date_add是一样的,给出列表均已测试:
代码描述addYears(<时间>,<数值>)增加<数值>年份addMonths(<时间>,<数值>)增加<数值>月份addWeeks(<时间>,<数值>)增加<数值>周数addDays(<时间>,<数值>)增加<数值>天数addHours(<时间>,<数值>)增加<数值>小时addMinutes(<时间>,<数值>)增加<数值>分钟addSeconds(<时间>,<数值>)增加<数值>秒数addQuarters(<时间>,<数值>)增加<数值>季度
代码使用展示:

SELECT
    addYears(toDate('2022-07-13 14:28:33'),1) AS time

3.subtract减去时间

和add是一样的,故不作表格展示,展示代码用法:

SELECT
    subtractYears(toDate('2022-07-13 14:28:33'),1) AS time

4.时间差值 dateDiff()

也是很简单的一个函数看过一次会有就好了:

SELECT
   dateDiff('year',toDate('2022-07-13 14:28:33'),toDate('2023-07-13 14:28:33')) AS time

后面一个时间减去前面一个时间,前面的参数为时间类似:

有: 'year','month','week','day','hour','minute','second'。

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见。


参阅

Clickhouse 时间日期函数实战(详细)

clickhouse的常用日期函数


本文转载自: https://blog.csdn.net/master_hunter/article/details/125762575
版权归原作者 fanstuck 所有, 如有侵权,请联系我们删除。

“Clickhouse时间日期函数一文详解+代码展示”的评论:

还没有评论