![](/img/trans.png)
[英]How can I get the previous month data in ORACLE, if I have to run the sql script every month?
[英]How can I get the previous month if the month is kind of number, not a format of time
現在,我的情況是我有兩種變量:
例如,如果 LOG_DTM = OCT 6 2022,則 LOG_DTM_ID = 20221006。
問題是我想從數據庫中找到上個月的數據,對於 LOG_DTM,我正在這樣做(它正在工作):
select *
from table
where
LOG_DTM between TRUNC(ADD_MONTHS(SYSDATE, -1),'MM')
and LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE,'mm'),-1))
但是,對於 LOG_DTM_ID,它不起作用:
select *
from table
where
LOG_DTM_ID between to_number(to_charc(TRUNC(ADD_MONTHS(SYSDATE, -1), 'MM')))
and to_number(to_charc(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, 'mm'), -1))))
我可以知道我怎么了嗎? 我的邏輯流程錯誤還是語法錯誤? 非常感謝。
TO_CHAR
而不是TO_CHARC
; 和TO_CHAR
的第二個參數。TRUNC(SYSDATE,'mm')-INTERVAL '1' SECOND
Select *
from table_name
Where LOG_DTM_ID between to_number(to_char(TRUNC(ADD_MONTHS(SYSDATE, -1),'MM'), 'YYYYMMDDHH24'))
AND to_number(to_char(TRUNC(SYSDATE,'mm')-INTERVAL '1' SECOND, 'YYYYMMDDHH24'))
其中,對於示例數據:
CREATE TABLE table_name (
LOG_DTM DATE,
LOG_DTM_ID NUMBER(10,0)
GENERATED ALWAYS AS (TO_NUMBER(TO_CHAR(log_dtm, 'YYYYMMDDHH24')))
);
INSERT INTO table_name (log_dtm)
SELECT ADD_MONTHS(SYSDATE, -1) FROM DUAL;
輸出:
日志_DTM | 日志_DTM_ID |
---|---|
2022-09-06 10:15:39 | 2022090610 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.