PostgreSQL dow转换

时间:2012-08-28 04:53:22

标签: sql postgresql date timestamp postgresql-9.1

PostgreSQL中是否有任何方法可以同时查找星期几的日期?我可以用

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

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

如果我想在9月份的每一天都运行这个提取,有一个简单的方法吗?我可以编写一个函数并将开始和结束日期提供给它吗?

1 个答案:

答案 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关键字和类型名称。在某些情况下,您可以将其用作用户标识符,但这是一个坏主意;选择一个更好的名字。