2017-02-13 3 views
3

Кто-нибудь знает запрос для получения данных с первого дня месяца до вчерашнего дня? Пытаюсь с помощью запроса ниже, но проблема в том, когда сегодня первый день месяца, так что значение становится между 20170201 и 20170131Как получить данные за первый день месяца до вчерашнего дня

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

Ex: если сегодня 01-02-2017 я хочу, чтобы выбрать данные с 01-01-2017 по 31-01-2017, но если сегодня 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

извините, сэр, я думаю, что мой вопрос неправильный, я отредактировал мой вопрос, но это тоже полезно, спасибо –

Смежные вопросы