簡體   English   中英

如果月份是數字而不是時間格式,我怎樣才能得到上個月

[英]How can I get the previous month if the month is kind of number, not a format of time

現在,我的情況是我有兩種變量:

  1. 日志_DTM
  2. 日志_DTM_ID
  • 對於1):它存儲有關月份的數據。
  • 對於2):是將LOG_DTM轉化為數字的數據,所以不是時間的表達,只是一個數字。

例如,如果 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))))

我可以知道我怎么了嗎? 我的邏輯流程錯誤還是語法錯誤? 非常感謝。

  1. 使用TO_CHAR而不是TO_CHARC
  2. 包含格式 model 作為TO_CHAR的第二個參數。
  3. 您可以將上限簡化為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.

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