Sysdate减去2天不同

时间:2014-03-06 16:36:05

标签: oracle conditional-statements sysdate

我目前正在为一个场景运行此查询,但我有两种情况:如果SYSDATE = Monday,则运行“SYSDATE - 2”,否则运行“SYSDATE - 1”。我通过Excel的OLE连接连接到数据库,所以我不确定我可以使用存储过程。有没有办法编写查询来完成这两个场景?感谢您的帮助。

SELECT 
   DISTINCT VERSION_NAME VERSION, MIN(RECONCILE_START_DT) DATES
FROM
   SDE.GDBM_RECONCILE_HISTORY
WHERE
    RECONCILE_RESULT = 'Conflicts'
AND
    RECONCILE_START_DT > SYSDATE -1
GROUP BY VERSION_NAME
ORDER BY 2 ASC NULLS LAST

1 个答案:

答案 0 :(得分:0)

您可以在WHERE条件中使用CASE语句在星期一减去2或在星期的其余时间减1。 TO_CHAR(DATE,'D')表示从星期日= 1开始的星期几。因此星期一是2。

试试这个:

SELECT
    VERSION_NAME AS VERSION,
    MIN(RECONCILE_START_DT) AS DATES
FROM
   SDE.GDBM_RECONCILE_HISTORY
WHERE
    RECONCILE_RESULT = 'Conflicts'
AND
    RECONCILE_START_DT > SYSDATE -
        CASE TO_CHAR(SYSDATE, 'D')
            WHEN '2' THEN 2
            ELSE 1 END

GROUP BY VERSION_NAME
ORDER BY 2 ASC NULLS LAST

此外,您不需要DISTINCT关键字,因为您已经使用GROUP BY。