Oracle SQL Current_Date - PullRequest
       12

Oracle SQL Current_Date

0 голосов
/ 14 мая 2018

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

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

select * from Inventory where Placement_End_Dt >= Current_date

Вышеприведенный код работает хорошо, за исключением того, что он не собирает записигде Placement_End_Dt сегодня (14 мая 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

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

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

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

select * from Inventory where trunc(Placement_End_Dt) >= trunc(sysdate);
0 голосов
/ 14 мая 2018

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

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

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

0 голосов
/ 14 мая 2018

При использовании 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.

...