簡體   English   中英

"在oracle sql中獲取從第1個月到當前日期的數據"

[英]get the data starting from 1st month till current date in oracle sql

我在下面編寫了運行良好的查詢,並且它在前一周每次都獲取數據。

    select t.day_id 
    from F_TIME t 
    where t.day_id >= TO_NUMBER (TO_CHAR( TRUNC ( SYSDATE , ''IW'' ) - 7 , ''YYYYMMDD'' )) 
                      and t.day_id <  TO_NUMBER ( TO_CHAR ( TRUNC ( SYSDATE , ''IW'' ), ''YYYYMMDD'' ))

我只熟悉MS SQL,對Oracle不太了解。 如果必須在MS SQL中執行此操作,則最終會以今天的日期為文本,並根據需要進行修改。

這是與MS SQL兼容的示例。 抱歉,我不得不把它轉換成Oracle,但是希望這個想法有意義,並且Oracle中有等效的功能。

select CONCAT(DATEPART(month, GETDATE()),'/1/', DATEPART(year, GETDATE()))

以下是使用方法的示例:

select * from MyTable
where timestamp > CONCAT(DATEPART(month, GETDATE()),'/1/', DATEPART(year, GETDATE()))

您可以針對yyyymmdd格式的day_id使用以下代碼:

   select day_id                  
     from F_TIME
    where to_date(day_id,'yyyymmdd') between to_date(to_char(sysdate,'yyyymm')||'01','yyyymmdd') and trunc(sysdate)
    order by to_date(day_id,'yyyymmdd') 

演示1

即使day_id是數字格式(不是字符串),在sql上面也可以,為此,您可以查看以下內容:

演示2

在Oracle中,表達式TRUNC(datestamp, 'MM')將任何日期時間表達式轉換為該月第一天的午夜。

如果您有日期戳,則日期選擇邏輯將如下所示。

 WHERE datestamp >= TRUNC(SYSDATE, 'MM')

在當前月份為您提供一切。

這將為您提供上個月的一切。

WHERE datestamp >= ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -1)
  AND datestamp <  TRUNC(SYSDATE, 'MM')

請注意,在該時間間隔結束時使用< 您不能將BETWEEN用於此類日期范圍。

編輯 ,看起來您的day_id是八位數字YYYYMMDD 因此,您需要將開始日期和結束日期轉換為該格式。

WHERE day_id>= TO_NUMBER(TO_CHAR(TRUNC(SYSDATE, 'MM'), 'YYYYMMDD'))

WHERE day_id >= TO_NUMBER(TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -1), 'YYYYMMDD'))
  AND day_id <  TO_NUMBER(TO_CHAR(TRUNC(SYSDATE, 'MM'), 'YYYYMMDD'))

提示 :盡可能使用DBMS提供的日期時間數據類型。 如您所見,使用這些數據類型的查詢比其他可能性更易於閱讀,並向橡皮鴨解釋

要獲取當前月份的第一天,您可以將第一個TRUNC(SYSDATE,'IW')TRUNC(SYSDATE,'MM') ,如果希望從第一個月開始運行的前一個月中的數據,則將-7-1本月的

然后,您想獲取直到sysdate的數據,因此再次在TRUNC(SYSDATE)打開第二個TRUNC(SYSDATE,'IW') TRUNC(SYSDATE)

SELECT t.day_id 
  FROM F_TIME t 
 WHERE t.day_id >= TO_NUMBER (TO_CHAR( TRUNC ( SYSDATE - 1 , 'MM' ) , 'YYYYMMDD' )) 
   AND t.day_id <= TO_NUMBER ( TO_CHAR ( TRUNC ( SYSDATE ), 'YYYYMMDD' ));

編輯:

<轉到<=以獲取今天。

這樣,如果您在2月1日運行查詢,則會得到整個1月和2月1日:如果要排除2月1日(即今天),則必須添加CASE WHEN語句。

您可以使用以下策略輕松獲得一個月的第一天:

    SELECT 
        ADD_MONTHS( LAST_DAY ( TO_DATE('20220228', 'yyyymmdd') ) + 1, -1) AS "FIRST_DAY"
    FROM dual

暫無
暫無

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

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