我正在研究Postgres 8.3数据库。我使用的查询仅用于选择工作日中包含的行。现在我已经像下面的例子中那样手动完成了这个,但是我想将它转移到一些功能,我可以在这里使用开始和结束日期,并获得相同的逻辑以应用如下。那是
如何创建一个输入为开始日期和结束日期的函数,函数的结果将是选择仅包含在数据集工作日的所有行(我希望将每个星期六和星期日排除在where子句条件如下)?
create table filter_tbl as
select *
from base_tbl where
(start_Time >= '2012-11-5' and start_Time < '2012-11-10')
or (start_time >= '2012-11-12' and start_time < '2012-11-17')
or (start_time >= '2012-11-19' and start_time < '2012-11-24')
or (start_time >= '2012-11-26' and start_time < '2012-12-01')
or (start_time >= '2012-12-03' and start_time < '2012-12-07')
or (start_time >= '2012-12-10' and start_time < '2012-12-14')
or (start_time >= '2012-12-17' and start_time < '2012-12-21')
or (start_time >= '2012-12-24' and start_time < '2012-12-28')
or (start_time >= '2012-12-31' and start_time < '2013-01-04')
or (start_time >= '2013-01-07' and start_time < '2013-01-11')
or (start_time >= '2013-01-14' and start_time < '2013-01-18')
or (start_time >= '2013-01-21' and start_time < '2013-01-25')
or (start_time >= '2013-01-28' and start_time < '2013-02-02')
or (start_time >= '2013-02-04' and start_time < '2013-02-09')
or (start_time >= '2013-02-11' and start_time < '2013-02-16')
or (start_time >= '2013-02-18' and start_time < '2013-02-23')
or (start_time >= '2013-02-25' and start_time < '2013-03-02')
or (start_time >= '2013-03-04' and start_time < '2013-03-09')
or (start_time >= '2013-03-11' and start_time < '2013-03-16');
答案 0 :(得分:18)
根据您的示例,start_time
似乎是文本。然后,您需要使用timestamp
将其转换为to_timestamp
,然后使用EXTRACT
提取星期几。
您的WHERE
条款将如下:
WHERE EXTRACT(dow FROM timestamp (to_timestamp(start_time, "YYYY-MM-DD"))
NOT IN (0,6)
链接:Data Type Formatting Functions和Date/Time Functions and Operators。
答案 1 :(得分:6)
select *
from base_tbl
where extract(dow from start_time) in (1,2,3,4,5)
答案 2 :(得分:1)
答案 3 :(得分:1)
以下内容应该返回星期几。
date_part('dow', Date);
使用默认设置0是星期日,6是星期六
答案 4 :(得分:1)
select to_char(date, 'Day') from table