使用系统日期获取周一至周五

时间:2013-11-03 22:05:48

标签: sql oracle

如何使用sysdate在本周的任何一天获得当前的营业周?我想有一个sql语句,它给我我们正在运行的当前周的活动,而不必有5个不同的sql语句。这可能吗?

2 个答案:

答案 0 :(得分:1)

我认为你必须使用next_day()函数来实现这一目标。您将不得不尝试使用此函数的一些组合来在1个SQL语句中执行此操作。

这是一些伪代码。我没有测试过这个,但它应该足以让你开始。

where my_operating_date >= next_day( trunc(sysdate) - interval '7' day, 'MON')
and my_operating_date <  next_day( trunc(sysdate) - interval '2'  day, 'FRI')

我修改了来自this SO thread的pseduo代码,该代码解决了前一周类似的要求。对这个答案的解释应该让你前进。请确保对边缘情况进行大量测试,例如当前时间是周一或周五。

答案 1 :(得分:1)

SELECT  SYSDATE
FROM    DUAL
;
-- 2013-11-04 11:06:14

SELECT  TRUNC(SYSDATE+3) - (TO_CHAR(SYSDATE+3, 'D') - 1)
,       TRUNC(SYSDATE+3) - (TO_CHAR(SYSDATE+3, 'D') - 5)
FROM    DUAL
;
-- 2013-11-04 00:00:00  2013-11-08 00:00:00


SELECT  TRUNC(SYSDATE+2) - (TO_CHAR(SYSDATE+2, 'D') - 1)
,       TRUNC(SYSDATE+2) - (TO_CHAR(SYSDATE+2, 'D') - 5)
FROM    DUAL
;
-- 2013-11-04 00:00:00  2013-11-08 00:00:00


SELECT  TRUNC(SYSDATE+1) - (TO_CHAR(SYSDATE+1, 'D') - 1)
,       TRUNC(SYSDATE+1) - (TO_CHAR(SYSDATE+1, 'D') - 5)
FROM    DUAL
;
-- 2013-11-04 00:00:00  2013-11-08 00:00:00


SELECT  TRUNC(SYSDATE) - (TO_CHAR(SYSDATE, 'D') - 1)
,       TRUNC(SYSDATE) - (TO_CHAR(SYSDATE, 'D') - 5)
FROM    DUAL
;
-- 2013-11-04 00:00:00  2013-11-08 00:00:00