2013-10-24 7 views
0

Может быть, этим вопросом немая один или неоднократной один, но я не получить точную answe для этогоразница Даты в оракуле

У меня есть таблица, которая имеет столбец формата дата (eff_date), я хочу, чтобы данные, где разница между Sysdate андой eff_date более чем за два года и равен два года

Я использую этот запрос я знаю его синтаксический неправильно

select * 
from Customer 
where (select floor(months_between(sysdate,eff_date)/12) 
     from Customer t) >= 2 

ответ

1

Если вы хотите использовать months_between

SELECT * 
    FROM customer 
WHERE months_between(sysdate, eff_date) >= 24 

Если есть индекс eff_date, хотя, вы, вероятно, хотите

SELECT * 
    FROM customer 
WHERE eff_date <= sysdate - interval '2' year 
+0

Okay спасибо за ответ. что вы подразумеваете под индексом ..? Я первый, кого вы предложили, а второй - дает разные результаты. Я думаю, что сначала правильный ответ. Я попробовал один ответ. Исправьте, если я ошибаюсь .. 'select * from (выберите t. *, Floor (months_between (sysdate, eff_date)/12) как date_diff от клиента t), где date_diff> = 2' – aravind

+0

@aravind - Извините, я забыл изменить оператор '> ='. Исправлен второй ответ. Индекс представляет собой структуру в базе данных, целью которой является сделать запросы более эффективными, позволяя запросам искать определенные строки в «O (log N)», а не читать каждую строку в таблице, которая является «O (n)». Если в 'eff_date' есть индекс, первый запрос не сможет его использовать, ему нужно будет отсканировать всю таблицу. Второй запрос может использовать индекс в зависимости от вашего распределения данных. –

+0

Wow спасибо, первый из них работает хорошо. Еще один вопрос будет какой-либо проблемой, если какой-либо год является високосным годом? – aravind

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