Текущая_дата Oracle SQL

У меня возникли проблемы при использовании функции Current_Date в простом запросе, и я не могу понять, почему. Я работаю в среде Oracle 12c с использованием Oracle SQL Developer 3.2.

Мой исходный запрос выглядит примерно так:

select * from Inventory where Placement_End_Dt >= Current_date

Вышеупомянутое работает нормально, за исключением того, что не собирает записи, где Placement_End_Dt сегодня (14th 18 мая).

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

select * from Inventory where Placement_End_Dt = Current_date

Однако, когда я применяю форматирование даты следующим образом, оно работает:

select * from Inventory where to_char(Placement_End_Dt, 'DD-MM-YYYY') = to_char(Current_date, 'DD-MM-YYYY')

Затем я пытаюсь расширить это, чтобы вернуться к моему исходному запросу, чтобы выбрать все записи с датой окончания, начиная с сегодняшнего дня:

select * from Inventory where to_char(Placement_End_Dt, 'DD-MM-YYYY') => to_char(Current_date, 'DD-MM-YYYY')

Это бросается в глаза, потому что выбираются записи с прошлым, настоящим и будущим Placement_End_Dt!

Столбцы Placement_End_Dt определены как тип данных Oracle DATE.

Был бы признателен за информацию о том, как я могу заставить этот запрос работать.

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

Ответы 3

При использовании to_char вы сравниваете строки.

to_char(date '2000-01-20', 'DD-MM-YYYY') > to_char(date '2018-05-14', 'DD-MM-YYYY')

потому что «20 -01-2000» больше, чем «14 -05-2018», из-за первых букв в строках: «2»> «1».

А CURRENT_DATE почти никогда не используется, потому что он использует время вашего компьютера, а не время базы данных, поэтому вы легко можете отдохнуть на несколько часов. Вместо этого используйте SYSDATE.

Попробуйте это, он вернет строки для настоящих и будущих дней.

select * from Inventory where trunc(Placement_End_Dt) >= trunc(sysdate);

Думаю, это можно упростить до where placement_end_dt >= trunc(sysdate);

William Robertson 15.05.2018 13:17
Ответ принят как подходящий

Я бы предложил использовать этот запрос

select * from Inventory where trunc(Placement_End_Dt) = trunc(sysdate);

Столбцы Oracle Date также хранят метку времени по умолчанию, поэтому, если записи не совпадают с точностью до секунды, они не будут совпадать. Когда вы используете trunc () в столбце даты, он обрезает метку времени и оставляет только дату.

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