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