PostgreSQL中是否有任何方法可以同时查找星期几的日期?我可以用
SELECT extract(dow from timestamp '2012-08-27')
一次只能获得一天,但我想一次提供一个月左右的数据。我在我的数据库中创建了一个“日历”表,其中有一列,日期,作为格式为yyyy-MM-dd的主键。
如果我想在9月份的每一天都运行这个提取,有一个简单的方法吗?我可以编写一个函数并将开始和结束日期提供给它吗?
答案 0 :(得分: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'
和< DATE '2012-10-01'
代替BETWEEN
;它避免了结束日期的混乱构造,并且工作原理相同。
要将其包装在一个函数中,您需要弄清楚如何调用它以及如何首先返回结果。您想通过开始和结束日期范围吗?代表当月第1天的日期?什么?您希望如何返回结果?
顺便说一句,如果您的列实际上被命名为"date"
,那么请更改其名称。 DATE
是SQL关键字和类型名称。在某些情况下,您可以将其用作用户标识符,但这是一个坏主意;选择一个更好的名字。