编写一个函数,仅在工作日的PostgreSQL中选择数据

use*_*980 9 sql postgresql postgresql-8.3

我正在研究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');
Run Code Online (Sandbox Code Playgroud)

PM *_*7-1 18

根据您的示例,它似乎start_time是文本.然后你需要将它转换为timestamp使用to_timestamp,然后使用提取星期几EXTRACT.

你的WHERE条款是这样的:

WHERE EXTRACT(dow FROM timestamp (to_timestamp(start_time, "YYYY-MM-DD"))
NOT IN (0,6)
Run Code Online (Sandbox Code Playgroud)

链接:数据类型格式化函数日期/时间函数和运算符.


a_h*_*ame 6

select *
from base_tbl  
where extract(dow from start_time) in (1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)