PostgreSQL 中是否有任何方法可以一次查找一周中的某一天以查找一组日期?我可以用
SELECT extract(dow from timestamp '2012-08-27')
一次获取一天,但我想一次提供一个月左右的数据。我在我的数据库中创建了一个“日历”表,其中有一列日期,作为格式为 yyyy-MM-dd 的主键。
如果我想在 9 月的每一天都运行此数据提取,有没有简单的方法可以做到这一点?我可以编写一个函数并将开始和结束日期输入其中吗?
PostgreSQL 中是否有任何方法可以一次查找一周中的某一天以查找一组日期?我可以用
SELECT extract(dow from timestamp '2012-08-27')
一次获取一天,但我想一次提供一个月左右的数据。我在我的数据库中创建了一个“日历”表,其中有一列日期,作为格式为 yyyy-MM-dd 的主键。
如果我想在 9 月的每一天都运行此数据提取,有没有简单的方法可以做到这一点?我可以编写一个函数并将开始和结束日期输入其中吗?
从你的描述中我可以猜到,这是:
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 关键字和类型名称。在某些情况下,您可以将其用作用户标识符,但这是个坏主意;选择一个更好的名字。