为什么插入 Clickhouse 数据库的日期格式不正确?
最编程
2024-05-08 11:15:48
...
先"重现"一下"问题"
先创建一个有DateTime类型的表
create table test (a DateTime, b String) ENGINE = TinyLog
插入一条数据
insert into test values (2019-09-25, 'case01')
查询
select * from test
结果竟然是
2105-06-18 21:52:51 case01
感觉有点诡异
跳过分析过程,直接说问题答案:
DateTime类型需要写数字和字符串类型,比如
insert into test values (0, 'case01')
和
insert into test values ('2019-09-25 15:50:01', 'case01')
都是可以的
字符类型会被转换为时间类型,数字代表是Unix epoch time
当数字是n时(为正数),代表的是UTC 1970-01-01 00:00:00 +n秒
当数字是-n时(为负数),代表的是UTC 2106-02-07 06:28:16 -n秒
当写法是诸如2019-09-25时(没有加引号), 它被理解为 -20190925
没看源代码,猜测它的行为是:发现负号(不管负号的位置和个数)后去掉所有负号,得到数字n,n转换为负数-n
不信你可以试试
insert into test values (2019--0-9--2-5--, 'case02')