0

您如何使用 sysdate 在一周中的任何一天获取当前的工作周?我想要一个 sql 语句,它可以为我提供我们正在操作的本周的活动,而不必有 5 个不同的 sql 语句。这可能吗?

4

2 回答 2

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')

我从这个 SO 线程修改了伪代码,解决了获得前一周的类似要求。对那个答案的解释应该能让你继续前进。一定要对边缘情况进行大量测试,比如今天是周一还是周五。

于 2013-11-04T00:13:54.800 回答
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
于 2013-11-04T10:09:22.647 回答