Clickhouse 生成日历表

运行环境:
SELECT version()Query id: 90d74a1e-3ce1-42b4-8b66-bd09802310c4┌─version()─┐
│ 20.12.3.3 │
└───────────┘1 rows in set. Elapsed: 0.002 sec.

 

clickhouse的 date和datetime的时间范围目前只支持  [1970-01-01 00:00:00, 2105-12-31 23:59:59].

计算可以容纳的最大天数:
select dateDiff('day',cast('1970-01-01' as timestamp),cast('2105-12-31' as timestamp)) gap_day;┌─gap_day─┐
│   49672 │
└─────────┘1 rows in set. Elapsed: 0.008 sec.SELECT count(1)
FROM
(SELECT (((n1.i + (n2.i * 10)) + (n3.i * 100)) + (n4.i * 1000)) + (n5.i * 10000)FROM num AS n1CROSS JOIN num AS n2CROSS JOIN num AS n3CROSS JOIN num AS n4CROSS JOIN num AS n5ORDER BY 1 ASC
) AS tQuery id: 8e6eba23-d993-496a-8167-23fbe71e6d22┌─count(1)─┐
│   100000 │
└──────────┘1 rows in set. Elapsed: 0.011 sec.创建表calender ,一个字段用于存储日期即可。
create database calender;
use calender;create table num(i int) ENGINE = MergeTree() order by i;insert into num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);create table calender(date_dt timestamp) engine=MergeTree() order by date_dt;INSERT INTO calender (date_dt) SELECT addDays(CAST('2016-01-01 00:00:00', 'timestamp'), t.id) AS date_dt
FROM
(SELECT (((n1.i + (n2.i * 10)) + (n3.i * 100)) + (n4.i * 1000)) + (n5.i * 10000) AS idFROM num AS n1CROSS JOIN num AS n2CROSS JOIN num AS n3CROSS JOIN num AS n4CROSS JOIN num AS n5ORDER BY 1 ASC
) AS t
WHERE t.id <= 30000select min(date_dt),max(date_dt) ,count(date_dt) from calender;┌────────min(date_dt)─┬────────max(date_dt)─┬─count(date_dt)─┐
│ 2016-01-01 00:00:00 │ 2098-02-19 00:00:00 │          30001 │
└─────────────────────┴─────────────────────┴────────────────┘1 rows in set. Elapsed: 0.008 sec. Processed 30.00 thousand rows, 120.00 KB (3.98 million rows/s., 15.92 MB/s.)create table year_biweek_startday( year String ,startday timestamp) engine=MergeTree() order by year;INSERT INTO year_biweek_startday SELECTyear,startday
FROM
(SELECT'2016' AS year,CAST('2016-01-04 00:00:00', 'TIMESTAMP') AS startdayUNION ALLSELECT'2017',CAST('2017-01-02 00:00:00', 'TIMESTAMP')UNION ALLSELECT'2018',CAST('2018-01-01 00:00:00', 'TIMESTAMP')UNION ALLSELECT'2019',CAST('2019-01-07 00:00:00', 'TIMESTAMP')UNION ALLSELECT'2020',CAST('2020-01-06 00:00:00', 'TIMESTAMP')UNION ALLSELECT'2021',CAST('2021-01-04 00:00:00', 'TIMESTAMP')UNION ALLSELECT'2022',CAST('2022-01-03 00:00:00', 'TIMESTAMP')
) AS tselect * from year_biweek_startday;SELECT *
FROM year_biweek_startdayQuery id: 4a95335d-a8af-45f2-925a-0883d4b57eb6┌─year─┬────────────startday─┐
│ 2016 │ 2016-01-04 00:00:00 │
│ 2017 │ 2017-01-02 00:00:00 │
│ 2018 │ 2018-01-01 00:00:00 │
│ 2019 │ 2019-01-07 00:00:00 │
│ 2020 │ 2020-01-06 00:00:00 │
│ 2021 │ 2021-01-04 00:00:00 │
│ 2022 │ 2022-01-03 00:00:00 │
└──────┴─────────────────────┘7 rows in set. Elapsed: 0.004 sec.create table calender_details(date_dt              timestamp comment '日期 2016-01-01 00:00:00.0 timestamp'
,peroid_date          String COMMENT '日期,20201104'
,peroid_month         String COMMENT '月份,202009'
,period_quarter       String comment '季度,202001'
,year_day             int comment '自然年的第几天,范围1-366'
,year_week            int comment '自然年的第几周,范围1-53'
,year_month           int comment '自然年的第几月,范围1-12'
,year_quarter         int comment '自然年的第几季,范围1-4'
,year                 int comment '自然年,范围0001-9999'
,quarter_day          int comment '一个季度的第几天,范围1-93'
,quarter_week         int comment '一个季度的第几周,范围1-13'
,quarter_month        int comment '一个季度的第几月,范围1-3'
,month_day            int comment '一个月的第几天,范围1-31'
,month_week           int comment '一个月的第几周,范围1-5'
,month_name_en        String comment '自然月的英文全称 January--December'
,month_name_en_abbr   String comment '自然月的英文简写 Jan--Dec'
,week_day             int comment '周几 1--7'
,week_name_en         String comment '周几的英文全称 Monday--Sunday '
,week_name_en_abbr    String comment '周几的英文简写 Mon--Sun'
,biweek               int comment '自然年的第几个双周 1-26'
,biweek_startday      timestamp comment '双周的开始日期'
,biweek_endday        timestamp comment '双周的结束日期'
) engine=MergeTree()
partition by year
order by peroid_date;

 查看双周数据的测试:select c.date_dt,s.year,s.startday,dateDiff('day',s.startday,c.date_dt) diff_day, dateDiff('day',s.startday,c.date_dt)/7 bi_day, floor(datediff('day',s.startday,c.date_dt)/14)+1 biweek,addDays(s.startday,cast(floor(dateDiff('day',s.startday,c.date_dt)/14) as int)*14) biweek_startday,addDays(s.startday,cast(floor(dateDiff('day',s.startday,c.date_dt)/14) as int)*14+13) biweek_endtday
from  calender c inner join  year_biweek_startday s on toYear(c.date_dt)=cast(s.year as UInt16)
where toYear(c.date_dt)=2020
order by 1

 最终生成日历的脚本:

insert into  calender_details(
date_dt
,peroid_date       
,peroid_month      
,period_quarter    
,year_day          
,year_week         
,year_month        
,year_quarter
,year
,quarter_day       
,quarter_week      
,quarter_month     
,month_day         
,month_week        
,month_name_en     
,month_name_en_abbr
,week_day          
,week_name_en      
,week_name_en_abbr 
,biweek            
,biweek_startday   
,biweek_endday 
)
select c.date_dt,toYYYYMMDD(date_dt) period_date,toYYYYMM(date_dt) period_month,concat(cast(toYear(date_dt ) as String),'0',cast(toQuarter(date_dt) as String )) period_quarter,toDayOfYear(date_dt) year_day,toWeek(date_dt)  year_week,toMonth(date_dt) year_month ,toQuarter(date_dt)  year_quarter,toYear(date_dt)      year,dateDiff('day',toStartOfQuarter(date_dt) ,date_dt) +1 quarter_day,dateDiff('week',toStartOfQuarter(date_dt),date_dt )+1 quarter_week,dateDiff('month',toStartOfQuarter(date_dt),date_dt )+1 quarter_month,toDayOfYear(date_dt)  month_day,dateDiff('week',toStartOfMonth(date_dt),date_dt)+1  month_week,case      when toMonth(date_dt)= 1  then  'January' when toMonth(date_dt)= 2 then  'February' when toMonth(date_dt)= 3  then  'March'     when toMonth(date_dt)= 4  then  'April'    when toMonth(date_dt)= 5  then  'May'     when toMonth(date_dt)=  6 then 'June'   when toMonth(date_dt)=  7 then 'July'    when toMonth(date_dt)=  8 then  'August'   when toMonth(date_dt)=  9 then  'September' when toMonth(date_dt)= 10 then  'October'   when toMonth(date_dt)= 11 then 'November'  when toMonth(date_dt)=12 then  'December' end month_name_en
,case      when toMonth(date_dt)= 1 then 'Jan'when toMonth(date_dt)=2  then 'Feb'when toMonth(date_dt)=3    then 'Mar'when toMonth(date_dt)=4    then 'Apr'when toMonth(date_dt)=5    then 'May'when toMonth(date_dt)=6    then 'Jun'when toMonth(date_dt)=7    then 'Jul'when toMonth(date_dt)=8    then 'Aug'when toMonth(date_dt)=9    then 'Sep'when toMonth(date_dt)=10  then 'Oct'when toMonth(date_dt)=11 then 'Nov'when toMonth(date_dt)=12 then 'Dec'end month_name_en_abbr
,toDayOfWeek(date_dt)  week_day
,case when toDayOfWeek(date_dt)=1  then 'Monday' when toDayOfWeek(date_dt)=2 then 'Tuesday'  when toDayOfWeek(date_dt)=3 then 'Wednesday'  when toDayOfWeek(date_dt)=4 then 'Thursday' when toDayOfWeek(date_dt)=5 then 'Friday' when toDayOfWeek(date_dt)=6 then 'Saturday' when toDayOfWeek(date_dt)=7 then 'Sunday' end   week_name_en,case    when toDayOfWeek(date_dt)= 1 then 'Mon'when toDayOfWeek(date_dt)=2 then 'Tue'when toDayOfWeek(date_dt)=3 then 'Wed'when toDayOfWeek(date_dt)=4 then 'Thu'when toDayOfWeek(date_dt)=5 then 'Fri'when toDayOfWeek(date_dt)=6 then 'Sat'when toDayOfWeek(date_dt)=7 then 'Sun'end   week_name_en_abbr , floor(datediff('day',s.startday,c.date_dt)/14)+1 biweek,addDays(s.startday,cast(floor(dateDiff('day',s.startday,c.date_dt)/14) as int)*14) biweek_startday,addDays(s.startday,cast(floor(dateDiff('day',s.startday,c.date_dt)/14) as int)*14+13) biweek_endtday
from  calender c inner join  year_biweek_startday s on toYear(c.date_dt)=cast(s.year as UInt16)
where toYear(c.date_dt)  between 2016 and 2022
order by 1

查询验证:

 select *  from calender_details where peroid_date ='20201216'\GSELECT *
FROM calender_details
WHERE peroid_date = '20201216'Query id: 4f687f13-9c06-4f5f-9256-97cfdcc3d2f5Row 1:
──────
date_dt:            2020-12-16 00:00:00
peroid_date:        20201216
peroid_month:       202012
period_quarter:     202004
year_day:           351
year_week:          50
year_month:         12
year_quarter:       4
year:               2020
quarter_day:        77
quarter_week:       12
quarter_month:      3
month_day:          351
month_week:         3
month_name_en:      December
month_name_en_abbr: Dec
week_day:           3
week_name_en:       Wednesday
week_name_en_abbr:  Wed
biweek:             25
biweek_startday:    2020-12-07 00:00:00
biweek_endday:      2020-12-20 00:00:001 rows in set. Elapsed: 0.005 sec.

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/26247.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

邮件营销EDM(Email Direct Marketing) 运营笔记

我是2018年毕业后接触邮件营销&#xff0c;国内和国外的邮件营销都接触过。从最初和公司爬虫团队合作扩张性开发客户到现在的客户精细化运营&#xff0c;期间遇到过邮件营销各种各样的问题。好像发mass mail 被投诉垃圾邮件平台被封&#xff0c;送达打开率不正常&#xff0c;邮…

Tips系列之飞书日历

最近收到很多小伙伴的问题,咨询飞书日历如何使用,今天就给大家呈上几个小Tips,让你更全面的了解飞书日历! 👉免费使用​ 飞书官网 1、订阅日历 你可以订阅同事的日历,查看对方的忙闲状态,省去反复沟通的麻烦,快速找到空闲时间并邀约会议。 如何订阅日历方法一:在日…

使用日历丰富产品的用户体验

前言 经过一段时间的梳理和遴选&#xff0c;我挑选出了Android知识图谱中重要的部分&#xff0c;制作了一张脑图。读者朋友们可按照脑图查漏补缺了&#xff0c; 图片尺寸较大&#xff0c;仅附链接 。 当然&#xff0c;这是我按照自己的判断、结合参考其他博主的观点进行的挑选…

2023 热点营销日历:179 个重要节日 + 46 个关键事件 + 12 个经典案例

又是一年初始时&#xff0c;为大家准备了一份全年营销日历&#xff0c;速速领取收藏哟&#xff5e; 一月营销热点 营销话题&#xff1a;元旦、春节、春运、年味、团圆、旅游、FLAG…… 2023 开年注定是特殊的一年。三年消费欲望在这个春节集中释放&#xff0c;在外漂泊的游子踏…

likewen的救赎之路

likewen的救赎之路 标准化救赎之路,只针对本人 文章目录 likewen的救赎之路java的八股文算法操作系统&计算机网络企业开发基础mysqlspring系列spring5springbootspringcloud linux前端**设计模式**缓存redis 消息队列nginx?Netty**微服务**docker认识一下常用的类库测试其…

大会议题重磅出炉,豪华阵容等你面基!RustChinaConf 2023!【附第一天议程】

本次大会议题品质一流&#xff0c;嘉宾多来自行业一线&#xff0c;干货多多&#xff0c;且在各领域遍地开花&#xff0c;可看出Rust星星之火在中国已成燎原之势&#xff01; 大会时间地址 6.17 - 6.18 浦东新区张杨路777号 上海锦江汤臣洲际酒店 官网地址 https://rustcc.cn/20…

张俊林:大语言模型带来的交互方式变革

来自&#xff1a;机器之心 演讲&#xff1a;张俊林 进NLP群—>加入大模型与NLP交流群 7 月 8 日&#xff0c;在机器之心举办的 2023 WAIC AI 开发者论坛上&#xff0c;新浪微博新技术研发负责人张俊林先生发表了主题演讲《自然语言交互&#xff1a;大语言模型带来的交互方式…

Hyper-v的客户端连接工具VMConnect

我们在玩Hyper-v的时候&#xff0c;一般也是走走套路&#xff0c;创建个虚拟机&#xff0c;中间可能会因为到底要给这台虚拟机分配多少内存多大硬盘作一番思想半争&#xff0c;因为内存不多了&#xff0c;硬盘不够了&#xff0c;然后&#xff0c;就是连接虚拟机&#xff0c;启动…

vmware 虚拟机nat连接,局域网访问

vmware nat设置可以让虚拟机联网&#xff0c;这是比较常接触的用法。网上很多教程。 联网成功后想让局域网内别的机器访问&#xff0c;就需要绕个弯。nat的方式仅仅只是让你的虚拟机在你的机器上&#xff0c;通过你的网卡转发&#xff0c;才能访问网络。也就是说&#xff0c;你…

两台虚拟机实现tcp连接(使用telnet)

两台虚拟机实现tcp连接&#xff08;使用telnet&#xff09; 今天做实验&#xff0c;为了实现两台winxp虚拟机之间建立tcp连接&#xff0c;使用了系统的telnet服务。 首先&#xff0c;两台虚拟机都需开启telnet服务。 在控制面板 —管理工具 —服务 —telnet 将telnet的启动类型…

VMware 虚拟机与主机网络互通

VMware连接网络 一、虚拟机服务开启二、本地网络虚拟机的网卡启动三、设置虚拟机四、IPv4设置 一、虚拟机服务开启 1.右击“此电脑”图标&#xff0c;单击“管理”&#xff0c;出现以下界面。 查看VMware是否开启&#xff0c;没有开启的话&#xff0c;就右击→“启动”。 二…

【Linux】VMware连接虚拟网络的三种方式

目录 一、Bridged&#xff08;桥接模式&#xff09;二、NAT&#xff08;地址转换模式&#xff09;三、Host-Only&#xff08;仅主机模式&#xff09; 由于Linux目前很热门&#xff0c;越来越多的人在学习linux&#xff0c;但是买一台服务放家里来学习&#xff0c;实在是很浪费。…

VM虚拟机设置网关,连接网络

VM虚拟机设置网关服务 vi /etc/sysconfig/network-scripts/ifcfg-ens33 编辑虚拟机信息 TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic #修改成静态 DEFROUTEyes IPV4_FAILURE_FATALno IPV6INITyes IPV6_AUTOCONFyes IPV6_DEFROUTEyes IPV6_FAILURE_FATALno…

Hyper-V虚拟机连接外部网络

Hyper-V连接外部网络 Hyper-V连接外网共需要三个步骤1.使用hyper-v创建一个虚拟交换机。第一步&#xff1a;点击虚拟交换机管理第二步&#xff1a;新建虚拟交换机第三步&#xff1a;修改名称和备注&#xff0c;注意选择外部网络第四步&#xff1a;点击是&#xff0c;并等待一会…

自己的电脑netassist软件(其他上位机软件同理)建立的虚拟TCP服务器其他客户端连不上??但客户端能连接WiFi。

1.检查下位机程序的ip地址和端口号是否正确&#xff0c;尽量使用手机热点测试&#xff0c;最好不要连接路由器&#xff01; 2.第一条没问题后检查第二条&#xff0c;电脑的公共网络的防火墙中该软件没有在白名单里(我的是这个原因&#xff0c;亲测可用)。 下面我们主要说一下第…

千牛群发消息怎么发?推荐UiBot千牛群发消息机器人

千牛是专供淘宝卖家和天猫商家使用的工作软件&#xff0c;可以说是卖家旺旺的升级版&#xff0c;很多客户对于千牛群发消息有很大的需求&#xff0c;但又不知如何在千牛群发消息。其实在千牛群发消息很简单&#xff0c;来试试UiBot千牛群发消息机器人就知道了。 千牛群发消息机…

千牛工作台使用教程

千牛工作台几乎是各个淘宝天猫卖家必备的后台工作软件&#xff0c;管理着我们网上的店铺&#xff0c;我们在后台可以看到自己店铺的交易信息&#xff0c;每日流量和交易的统计 工具/原料 电脑 千牛工作台 方法/步骤 1、下载千牛工作台 通过百度软件或者360软件管家直接下载…

移动千牛开放体验治理实践与防治方案

作者&#xff1a;王文华(连墨) 千牛是阿里巴巴商家的多端开放式工作平台&#xff0c;每天服务数百万的活跃商家在移动和桌面端操作业务&#xff0c;包含店铺管理、客服接待、资讯消息等多项功能。 同时&#xff0c;千牛本身是一个开放的端体系架构&#xff0c;二三方能通过开…

python clicknium 库自动化千牛桌面端

python clicknium 库自动化千牛桌面端 千牛是阿里巴巴集团卖家工作台&#xff0c;商家经营的必备工具&#xff0c;今天我们使用python来自动化千牛桌面端。 clicknium 是基于 python 实现的一套 免费的UI 自动化的库&#xff0c;功能强大、简单易用&#xff0c;可以用来操作桌…

云空间 千牛 net 对接

{"error":"incorrect region, please use up-z2.qiniup.com, bucket is: 76demo"} 接入七牛云对象存储 注册七牛云账号&#xff0c;点右上角的密钥管理&#xff0c;key和secret需要复制到application.properties中。 因为用到对象云存储&#xff0c;放一些…