[英]How can I get the last 12 months from the current date PLUS extra days till 1st of the last month retrieved
[英]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()))
在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.