Я столкнулся с проблемой, что при выборе даты для текущего нужного месяца и года. Я попробовал 2 оператора, показанные ниже, но не смог выполнить запрос
select to_char(sysdate, 'Month') from income
select * from income where to_char(sysdate,month) = 'feb'
Обновлять
Но после более подробного изучения и изучения на веб-сайте oracle docs. Что я придумал, так это использовать предложение «между». Указание первого и последнего дня месяца. При этом он выполнит желаемый месяц/год
Для примера
SELECT column_name
FROM table_name where column_name = (Your own value) AND
column_date >= to_date('01/02/2012', 'dd/mm/yyyy')
and column_date < to_date('01/03/2012', 'dd/mm/yyyy')
Я надеюсь, что это поможет :)
Кроме того, есть ли в вашей таблице столбец с типом данных DATE
или TIMESTAMP
?
Ваше условие where использует sysdate вместо одного из столбцов таблицы. Это означает, что вы получаете либо все строки, либо ничего. Это то, что вы хотите?
Вы после чего-то вроде:
select *
from income
where <date_column> >= to_date('01/05/2019', 'dd/mm/yyyy')
and <date_column> < to_date('01/06/2019', 'dd/mm/yyyy')
(заменив <date_column>
на название столбца даты в таблице доходов, по которому вы хотите отфильтровать)?
Я бы предпочел BETWEEN
. Разумеется, с верхним пределом, равным 31/05.
@RobertKock Это не приведет к появлению строк с датами между 2019-05-31 00:00:01
и 2019-05-31 23:59:59
.
@MT0: вы правы, если в столбце даты также указано время. Забудь мой комментарий.
Я думаю, вы можете использовать следующий запрос:
select *
from income
where to_char(<date_column>,'MON-RRRR') = 'MAY-2019';
Если вы хотите передать строку типа 'May 2012'
, я бы рекомендовал:
select i.*
from income i
where i.datecol >= to_date('May 2012', 'Mon YYYY') and
i.datecol < to_date('May 2012', 'Mon YYYY') + interval '1' month;
Тем не менее, я думаю, что ваше приложение должно преобразовать строковое значение в диапазон дат, и вы должны использовать этот диапазон в своем запросе:
select i.*
from income i
where i.datecol >= :datestart
i.datecol < :dateend + interval '1 day';
Я настоятельно рекомендую вам избегать between
с датами, особенно в Oracle. Тип данных date
имеет встроенную временную составляющую, и это может привести к ошибкам при сравнении.
Вы хотите выбрать данные за февраль любого года или хотите данные за февраль текущего года? (Или что-то другое?)