2017-02-13 165 views
3

沒有人知道從月初的第一天到昨天的數據查詢嗎?我嘗試使用下面的查詢,但問題是當今天是本月的第一天,所以價值變得20170201和20170131防爆之間如何從本月的第一天到昨天獲取數據

select * from a where to_char(DATE,'yyyymmdd') BETWEEN to_char(sysdate,'yyyymm')||'01' and to_char(sysdate-1,'yyyymmdd') 

:如果今天是2017年1月2日我要選擇的數據從2017年1月1日到2017年1月31日,但如果今天是13-02-2017我想選擇數據從01-02-2017直到12-02-2017,謝謝之前

+1

首先,你正在做「字符算術」;你應該做日期算術。 – BobC

+0

在這個邊緣情況下會發生什麼? –

回答

1

此問題已已經更新了你的新邏輯。下面的查詢將保留記錄下列條件:當月的第一天至昨日

  • someDate跌倒,或
  • someDate,在今天是第一個月,隨地落在前面一個月


SELECT * 
FROM yourTable 
WHERE someDate BETWEEN CASE WHEN EXTRACT(DAY FROM SYSDATE) = 1 
          THEN TRUNC(SYSDATE-1, 'MONTH') 
          ELSE TRUNC(SYSDATE, 'MONTH') END AND 
         CASE WHEN EXTRACT(DAY FROM SYSDATE) = 1 
          THEN TRUNC(SYSDATE, 'MONTH') - 1 
          ELSE TRUNC(SYSDATE - 1) END 

此查詢假設你有一個DATE列名爲someDate

+0

對不起,先生,我想我的問題是錯誤的,我編輯了我的問題,但這也有用,謝謝 –