【问题标题】:Sysdate minus 2 different daysSysdate 减去 2 个不同的日期
【发布时间】:2014-03-06 16:36:05
【问题描述】:

我目前正在针对一种情况运行此查询,但我有两种情况:如果 SYSDATE = 星期一,则运行“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

【问题讨论】:

    标签: oracle conditional-statements sysdate


    【解决方案1】:

    您可以在 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。

    【讨论】:

    • 谢谢特里伯。 “CASE”,一个让我探索的新玩具。感谢您编辑我的原始帖子,以便其他人更容易找到和阅读。
    猜你喜欢
    • 2020-06-03
    • 1970-01-01
    • 2021-08-23
    • 2020-05-16
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多