Clickhouse--时区,年,季度,半年
SQL 年,季度,半年
-- 月度
SELECT concat(toString(toYear(now())),'年',toString(toMonth(now())),'月');
-- 季度
SELECT concat(toString(toYear(now())),'年',if(toMonth(now())/6>1,if(toMonth(now())/3>3,'4季度','3季度'),if(toMonth(now())/3>1,'2季度','1季度')));
-- 半年度
SELECT concat(toString(toYear(now())),'年',if(toMonth(now())/6>1,'下半年','上半年'));
-- 日期格式化
SELECT FROM_UNIXTIME(now(),'%Y-%m');
-- 季度
select toString(toQuarter(now()));
时区
默认设置
Clickhouse默认是读取操作系统的时区。
Clickhouse 提供设置时区参数
1.修改设置
sudo vim /etc/clickhouse-server/config.xml
<timezone>Asia/Shanghai</timezone>
由于clickhouse是俄罗斯人主导开发的,默认设置为Europe/Moscow
2.重启服务器:
sudo service clickhouse-server restart
配置文件说明如下:
<!-- Server time zone could be set here.
Time zone is used when converting between String and DateTime types,
when printing DateTime in text formats and parsing DateTime from text,
it is used in date and time related functions, if specific time zone was not passed as an argument.
Time zone is specified as identifier from IANA time zone database, like UTC or Africa/Abidjan.
If not specified, system time zone at server startup is used.
Please note, that server could display time zone alias instead of specified name.
Example: W-SU is an alias for Europe/Moscow and Zulu is an alias for UTC.
-->
<!-- <timezone>Europe/Moscow</timezone> -->
时区在日期时间相关的函数,若指定时区作为参数。在Datetime和String类型之间进行转换。
时区的指定是按照IANA标准的时区库指定的,可以在Linux系统中通过命令查询
若不指定则使用系统启动的时区。
使用默认服务器时区
-- 北京时区
SELECT
now() AS BJ_time,
toString(BJ_time),
formatDateTime(now(), '%F %T') AS bj_time,
toTimeZone(now(), 'America/New_York') AS NY_time
Query id: 3e50f4ec-2f7e-4f15-b8b1-6aa9af87bfe4
┌─────────────BJ_time─┬─toString(now())─────┬─bj_time─────────────┬─────────────NY_time─┐
│ 2022-01-10 23:08:52 │ 2022-01-10 23:08:52 │ 2022-01-10 23:08:52 │ 2022-01-10 10:08:52 │
└─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘
-- 伦敦时间
SELECT
now() AS LD_time,
toString(LD_time),
formatDateTime(now(), '%F %T') AS ld_time,
toTimeZone(now(), 'America/New_York') AS NY_time
Query id: ce2558a9-de2f-41fb-8059-fb2be76cca1f
┌─────────────LD_time─┬─toString(now())─────┬─ld_time─────────────┬─────────────NY_time─┐
│ 2022-01-10 15:09:31 │ 2022-01-10 15:09:31 │ 2022-01-10 15:09:31 │ 2022-01-10 10:09:31 │
└─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘
- DataGrip 查询北京时区时间
- DataGrip 查询伦敦时区时间
以上截图和客户端世家执行结果不相同,DataGrip 默认采用的是世界标准时间
idea访问clickhouse的话,需要配置连接高级选项,设置
use_time_zone = UTC+8,use_server_time_zone=false
应用即可
Linux下修改系统时间
获取系统时间
date -R
+0800 为东八区时区
设计服务器时间
先设日期
date -s 20140712
再设时间
date -s 18:30:50
一台机器还好说,多了你就会烦了。有没有一步到位的办法呢?几经搜索发现有!
date 071218302014(月日时分年)
这样可以一步到位。但是!但是什么呢,对于Linux来说,这样的写法太不human
date -s “20140712 18:30:50”
这样就可以一步到位
时间设置完了就要保存了。如果你会正常关机还好说。系统关的时候会保存一次,可是如果你可能不正常关机的话,可以这么先保存一下设置
hwclock --systohc