У меня есть две переменные TO_DATE
и FROM_DATE
. Моя таблица имеет два поля: DOJ
и DOL
. Я хочу выбрать все записи, где DOJ < TO_DATE and DOL > FROM_DATE
.Сравнение даты в базе данных Oracle
Как я могу написать запрос SQL для этого?
У меня есть две переменные TO_DATE
и FROM_DATE
. Моя таблица имеет два поля: DOJ
и DOL
. Я хочу выбрать все записи, где DOJ < TO_DATE and DOL > FROM_DATE
.Сравнение даты в базе данных Oracle
Как я могу написать запрос SQL для этого?
Вы можете столкнуться с проблемами с переменной с именем to_date, так как это встроенный в Oracle команду. Вы можете работать вокруг этого, используя двойные кавычки везде, где используется переменная, например:
SELECT * FROM my_table WHERE doj < "to_date" AND dol > from_date;
Непонятно, что вы хотели бы сделать.
Я хочу, чтобы выбрать все записи, в которых ДЮ < TO_DATE и, в то же время, DOL> FROM_DATE.
SELECT *
FROM MY_TABLE
WHERE DOJ < "TO_DATE" AND DOL > "FROM_DATE"; -- using double quotes in order to
-- avoid confusion with TO_DATE
-- built-in function with the same name.
-- Thanks to kicsit ;-)
Я хочу, чтобы выбрать все записи, в которых АЯ < TO_DATE и ОТДЕЛЬНО, DOL> FROM_DATE.
SELECT *
FROM MY_TABLE
WHERE DOJ < "TO_DATE"
UNION -- UNION ALL substituted with UNION, thanks to kicsit user ;-)
SELECT *
FROM MY_TABLE
WHERE DOL > "FROM_DATE";
... или - что одно и то же:
SELECT *
FROM MY_TABLE
WHERE DOJ < "TO_DATE" OR DOL > "FROM_DATE";
два запроса в «Вторая интерпретация» не дают те же результаты, так как UNION ALL будет производить дубликаты всех строк, удовлетворяющих обе состояние. – kicsit
Вы правы! ;-) Я ЗАМЕСТИТЕЛЬНЫЙ «СОЮЗ ВСЕ» с «СОЮЗОМ», который УДАЛЯЕТ ДУЛИКАТЫ ;-) – UltraCommit
Да, важно избегать путаницы с встроенной функцией Oracle TO_DATE, большое внимание ;-) – UltraCommit