2

PostgreSQL 中是否有任何方法可以一次查找一周中的某一天以查找一组日期?我可以用

SELECT extract(dow from timestamp '2012-08-27')

一次获取一天,但我想一次提供一个月左右的数据。我在我的数据库中创建了一个“日历”表,其中有一列日期,作为格式为 yyyy-MM-dd 的主键。

如果我想在 9 月的每一天都运行此数据提取,有没有简单的方法可以做到这一点?我可以编写一个函数并将开始和结束日期输入其中吗?

4

1 回答 1

3

从你的描述中我可以猜到,这是:

 SELECT the_date_column_name, extract(dow from the_date_column_name)
 FROM calendar
 WHERE date_trunc('month', the_date_column_name) = DATE '2012-09';

...或 btree-indexable 版本:

 SELECT the_date_column_name, extract(dow from the_date_column_name)
 FROM calendar
 WHERE the_date_column_name BETWEEN DATE '2012-09-01' AND (DATE '2012-09-01' + INTERVAL '1' MONTH) - INTERVAL '1' DAY;

应该做的工作。

如果您愿意,可以使用>= DATE '2012-09-01'and< DATE '2012-10-01'代替;BETWEEN它避免了结束日期的混乱结构并且工作方式相同。

要将它包装在一个函数中,您需要确定如何调用它以及如何首先返回结果。是否要传递开始和结束日期范围?代表感兴趣月份的第一天的日期?什么?您希望如何返回结果?

顺便说一句,如果您的列实际上被命名"date"为您的描述建议,请更改其名称。DATE是 SQL 关键字和类型名称。在某些情况下,您可以将其用作用户标识符,但这是个坏主意;选择一个更好的名字。

于 2012-08-28T04:59:51.113 回答