PostgreSQL中提取timestamp类型字段日部分的方法与报错解决
从Timestamp字段提取日部分的正确SQL写法
我定义了一个类型为**timestamp**的datetime字段,定义语句是datetime timestamp NOT NULL,想要提取其中的日部分,一开始试了三种写法全报错:
extract(DAY FROM TIMESTAMP min(to_char(u.datetime ,'YYYY-MM-DD HH24:MI'))::timestamp) EXTRACT(DAY FROM TIMESTAMP min(to_char(u.datetime ,'YYYY-MM-DD HH24:MI'))) date_part('day', min(to_char(u.datetime ,'YYYY-MM-DD HH24:MI')))
这些写法的问题在于画蛇添足:先把timestamp转成字符串(to_char),对字符串用min()聚合后得到的还是字符串,extract和date_part没法直接处理字符串类型的时间,自然报错。
后来改成下面的写法就成功运行了:
extract(day from MIN(datetime)) as Day
原因很简单:直接对原始的timestamp字段做MIN(datetime)聚合,得到的结果依然是timestamp类型,再用extract(day from ...)就能正确提取出日部分。
内容的提问来源于stack exchange,提问作者pm1359
相关产品推荐
相关产品推荐

