查询当前年份的PostgreSQL语句

43

我需要查看表中仅属于当前年份的行。

是否有可能通过当前年份参数过滤时间戳列,是否有某个函数可以返回此值?

SELECT * FROM mytable WHERE "MYDATE" LIKE CURRENT_YEAR

1
看一下CURRENT_TIMESTAMP,然后在它上面使用date_part... http://www.postgresql.org/docs/current/static/functions-datetime.html - Neil Stockton
3个回答

88

在 PostgreSQL 中,您可以使用以下内容:

SELECT * FROM mytable WHERE date_part('year', mydate) = date_part('year', CURRENT_DATE);

date_part函数在当前的PostgreSQL版本以及7.1及其之后的所有版本中都可用。


5
注意,该查询可能会比较慢。更好的做法是执行 mydate >= date_trunc('year',current_date) AND mydate < date_trunc('year',current_date + interval '1 year')。 - Jim Nasby
2
非常感谢您的提示!任何改进都非常受欢迎。我尝试用一些测量来证实您所写的内容。我对一个包含约200K条记录、总共50个列并具有9个不同日期或时间戳类型列的表格进行了测试。所选记录数因列而异,从500到30K不等。使用您的查询需要多达10%的时间。最好的结果接近水平。当然,我遵循了统计调查的规则。我猜您自己也尝试过很多次。有没有人能够提出自己的测量方法呢? - MyBrainHurts

18

这很古老,但现在你可以做到:

SELECT date_part('year', now()); -> 2020

你可以在now的位置传递任何时间戳。更多详细信息请查看文档


0
我更喜欢这种写作方式。
SELECT EXTRACT(YEAR FROM CURRENT_DATE);
SELECT EXTRACT(MONTH FROM CURRENT_DATE);
SELECT EXTRACT(WEEK FROM CURRENT_DATE);
SELECT EXTRACT(DAY FROM CURRENT_DATE);
SELECT EXTRACT(HOUR FROM NOW());
SELECT EXTRACT(MINUTE FROM NOW());
SELECT EXTRACT(SECOND FROM NOW());

这并没有回答问题。一旦你有足够的声望,你就能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审阅 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接