如何从一个月的第一天到昨天获取数据

时间:2017-02-13 04:03:52

标签: oracle date

是否有人知道从月份的第一天到昨天获取数据的查询?我尝试使用下面的查询,但问题是今天是当月的第一天,所以该值在20170201和20170131之间

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

例如:如果今天是01-02-2017我想选择01-01-2017至2017年3月31日的数据,但如果今天是13-02-2017我想从01-中选择数据02-2017至2017年2月12日,感谢之前

1 个答案:

答案 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的{​​{1}}列。