Oracle: выбор даты по месяцам с предложением where

Я столкнулся с проблемой, что при выборе даты для текущего нужного месяца и года. Я попробовал 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')  

Я надеюсь, что это поможет :)

Вы хотите выбрать данные за февраль любого года или хотите данные за февраль текущего года? (Или что-то другое?)

MT0 28.05.2019 12:17

Кроме того, есть ли в вашей таблице столбец с типом данных DATE или TIMESTAMP?

MT0 28.05.2019 12:17

Ваше условие where использует sysdate вместо одного из столбцов таблицы. Это означает, что вы получаете либо все строки, либо ничего. Это то, что вы хотите?

Robert Kock 28.05.2019 12:20
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
3
60
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы после чего-то вроде:

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.

Robert Kock 28.05.2019 12:18

@RobertKock Это не приведет к появлению строк с датами между 2019-05-31 00:00:01 и 2019-05-31 23:59:59.

MT0 28.05.2019 12:19

@MT0: вы правы, если в столбце даты также указано время. Забудь мой комментарий.

Robert Kock 28.05.2019 12:22

Я думаю, вы можете использовать следующий запрос:

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 имеет встроенную временную составляющую, и это может привести к ошибкам при сравнении.

Другие вопросы по теме