簡體   English   中英

Oracle SQL 動態開始和結束日期

[英]Oracle SQL Dynamic Start and End Date

我想要動態 Oracle 開始和結束日期 SQL,當 Sys_Date >= 2019 年 11 月 16 日時,該 SQL 將返回 <= 2019-12-31 的 start_date。標准的 YYYY 部分需要增加一年,每年 11 月16. 例如,當 Sys_Date >= 2020 年 11 月 16 日時,查詢將返回 start_date <= 2020-12-31 的記錄,而在 2021 年 11 月 16 日,查詢將返回起始日期 <= 2021 年的記錄-12-31。

我正在使用 Alteryx 和 IN-db 工具。 我對這些 Oracle 函數、SysDate、To_Date、Trunc、Add_Months 和 Next_Day 略有熟悉。

有一個 end_Date 標准也需要在每年 11 月 16 日提前一年。 截至今天,即 2020 年 1 月 13 日,當前返回的 end_date 是 >= 2019-01-01。 2020 年 11 月 16 日,返回的 end_Date 將 >= 2020-01-01。

這個工作的 Oracle SQL 需要在 11 月 16 日進行年度更新。

"START_DATE" <= to_date('2019-12-31','yyyy-mm-dd') and "END_DATE" >= to_date('2019-01-01','yyyy-mm-dd')

下面是使用 DateTimeNow 函數(不是 Oracle)來獲取/選擇/傳遞所需日期的成功 Alteryx 代碼,但這對我使用 Oracle SQL 沒有幫助。

下面是 Alteryx 應用程序中使用的代碼(不是 Oracle),用於使用 datetimeToday 函數查詢某些文件日期。

([FileDt] > Datetimeformat(DatetimeAdd(DateTimeToday(),-1,"year"),'%Y-01-01')) 
AND    // pass [FileDt] > Jan 1 of current year -1 year
ToDate(DateTimeNow())< ToDate(tostring(DateTimeYear(DateTimeNow()))+"-11-15") 
  //pass files when today is < Nov 15 current year
OR
([FileDt] >= ToDate(tostring(DateTimeYear(DateTimeNow()))+"-01-01") 
AND   // pass [FileDt] >= Jan 1 of current year
ToDate(DateTimeNow())>= ToDate(tostring(DateTimeYear(DateTimeNow()))+"-11-15")) 
  // pass files when today is >= Nov 15 Current Year

可能是這樣的。 也許這不是 100% 正確,但您應該了解它是如何工作的。

WHERE start_date <= 
   CASE WHEN TO_NUMBER(TO_CHAR(SYSDATE, 'MMDD')) < 1116 THEN 
      ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'), 12)-1
   ELSE 
      ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'), 24)-1
   END

謝謝你的反饋。 下面的代碼用於創建符合我要求的 StartDate:

CASE
    WHEN SYSDATE BETWEEN 
                 TO_DATE ('1116' || (EXTRACT (YEAR FROM SYSDATE)), 'MM/DD/YYYY')
             AND TO_DATE ('1231' || (EXTRACT (YEAR FROM SYSDATE)), 'MM/DD/YYYY')
    THEN TO_DATE ('1231' || EXTRACT (YEAR FROM SYSDATE), 'MM/DD/YYYY')

    WHEN SYSDATE BETWEEN 
                 TO_DATE ('0101' || (EXTRACT (YEAR FROM SYSDATE)), 'MM/DD/YYYY')
             AND TO_DATE ('1115' || (EXTRACT (YEAR FROM SYSDATE)), 'MM/DD/YYYY')
    THEN TO_DATE ('1231' || EXTRACT (YEAR FROM SYSDATE)-1, 'MM/DD/YYY')

    ELSE NULL
END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM