2017-02-13 118 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

对不起,先生,我想我的问题是错误的,我编辑了我的问题,但这也有用,谢谢 –