#oracle
#Oracle
Вопрос:
Я использую следующее WHERE с sysdate, чтобы получить диапазон between .
WHERE TO_CHAR(mopstart, 'yyyy-mm-dd hh24:mi:ss') BETWEEN TO_CHAR(sysdate,'YYYY-MM-DD')||' 21:00:00' AND TO_CHAR(sysdate 1,'YYYY-MM-DD')||' 20:59:59'
Мой вопрос в том, как мне создать BETWEEN с переменными для даты, чтобы вернуть дату начала и окончания предыдущих месяцев?
Ответ №1:
Обычно вы не используете BETWEEN для этого. Как и в реальной жизни, вы бы не сказали «время с начала прошлого месяца до конца прошлого месяца», а просто «в прошлом месяце», так что вы бы сделали в SQL.
Зная, что месяц на самом деле является годом и месяцем:
where extract(year from mopstart) = extract(year from sysdate)
and extract(month from mopstart) = extract(month from sysdate) - 1
Или:
where to_char(mopstart,'yyyymm') = to_char(add_months(sysdate,-1),'yyyymm')
Ответ №2:
Если я вас хорошо понимаю, это было бы:
where ... between trunc(add_months(sysdate, -1), 'MON') and trunc(sysdate, 'MON') - 1
Еще одна вещь: не используйте TO_CHAR
для сравнения дат, просто используйте даты и интервалы.