(Oracle 跳过查询周末的数据,并在下周一至五查找本应该在上周末的数据)
背景:有个需求是T+X day 发邮件,但是要跳过周末发邮件
变量及其意义:
CREATE_DATE:[TABLE_NAME] 的字段
BRING_UP:T + X 中的X,T 指CREATE_DATE,X 指几天
SELECT
id,
FIRST_BRING_UP,
CREATE_DATE
FROM
FO_BILLING_CYCLE
WHERE
-- ceil(FIRST_BRING_UP/7): 计算FIRST_BRING_UP 跨度多少个星期, 1个星期要延后2天发邮件
--查出所有在工作日的数据
(
--CREATE_DATE 与当前日期在同一周
NEXT_DAY( trunc(CREATE_DATE) ,2 ) = NEXT_DAY( trunc(SYSDATE) ,2 )
AND trunc( CREATE_DATE + FIRST_BRING_UP ) = trunc( SYSDATE )
--'1':周日,'7':周六
AND to_char( trunc( SYSDATE ), 'd' ) NOT IN ( '1', '7' )
)
OR (
--CREATE_DATE 与当前日期不在同一周
NEXT_DAY( trunc(CREATE_DATE) ,2 ) <> NEXT_DAY( trunc(SYSDATE) ,2 )
AND trunc( CREATE_DATE + FIRST_BRING_UP + 2*ceil( FIRST_BRING_UP / 7 ) ) = trunc( SYSDATE )
AND to_char( trunc( SYSDATE ), 'd' ) NOT IN ( '1', '7' )
)
网友评论