2010-05-26 4 views

ответ

2

Вы можете столкнуться с проблемами с переменной с именем to_date, так как это встроенный в Oracle команду. Вы можете работать вокруг этого, используя двойные кавычки везде, где используется переменная, например:

SELECT * FROM my_table WHERE doj < "to_date" AND dol > from_date; 
+0

Да, важно избегать путаницы с встроенной функцией Oracle TO_DATE, большое внимание ;-) – UltraCommit

0

Непонятно, что вы хотели бы сделать.

ПЕРВЫЙ ТОЛКОВАНИЕ

Я хочу, чтобы выбрать все записи, в которых ДЮ < 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"; 
+1

два запроса в «Вторая интерпретация» не дают те же результаты, так как UNION ALL будет производить дубликаты всех строк, удовлетворяющих обе состояние. – kicsit

+0

Вы правы! ;-) Я ЗАМЕСТИТЕЛЬНЫЙ «СОЮЗ ВСЕ» с «СОЮЗОМ», который УДАЛЯЕТ ДУЛИКАТЫ ;-) – UltraCommit

Смежные вопросы