2012-06-30 3 views
0

У меня есть структура таблицы, имеющая столбец EMP_DATE, как показано нижеПроблема с получением даты с использованием SYSDATE?

ID  EMP_DATE 
---- ----------- 
5400  14-FEB-2012 

и я вставил записи в таблицу, как показано ниже

INSERT INTO TEST_DATE VALUES(5400,SYSDATE); 

После вставки записи в то время как я пытаюсь принести записи тех у кого есть EMP_DATE SYSDATE его отсутствие строк. Для того времени пусть SYSDATE быть '01 -JUL-2012`

SELECT * FROM TEST_DATE WHERE EMP_DATE = SYSDATE; 
       (OR) 
SELECT * FROM TESt_DATE WHERE EMP_DATE = '01-JUL-2012'; 

я не смог выяснить, какое-либо решение. Любые предложения были бы полезными.

ответ

5

Основная проблема заключается в том, что дата включает часы, минуты и секунды, которые вы не учитываете. Если вы хотите, все для одного дня вы можете использовать функцию trunc для того, чтобы получить это:

SELECT * FROM TEST_DATE WHERE trunc(EMP_DATE) = trunc(SYSDATE); 

По умолчанию trunc удаляет временную часть даты, при работе на колонке даты. Я бы рекомендовал функциональный индекс на trunc(emp_date), чтобы оптимизировать этот запрос. Что-то вроде:

create index i_test_date on test_date(trunc(emp_date)); 

Я построил немного SQL Fiddle, чтобы продемонстрировать это.

Возникла дополнительная проблема; хотя Oracle действительно поддерживает литералы даты ANSI, ваш второй запрос неверен. Всегда, явно преобразовать в строку с датой с помощью функции to_date.

SELECT * FROM TEST_DATE WHERE EMP_DATE = to_date('01-07-2012','dd-mm-yyyy'); 

Я использовал mmdatetime format model вместо mon, поскольку нет никакой гарантии, что JUL всегда будет означать, июль; это зависит от ваших параметров NLS, от того, какой «язык дат» используется вашей конкретной базой данных или сеансом. Модель формата даты и времени - это то, как вы указываете базе данных формат любой строки, которую вы передаете, чтобы преобразовать ее в дату.


Если вы заинтересованы синтаксис ANSI для второго запроса будет:

SELECT * FROM TESt_DATE WHERE trunc(EMP_DATE) = DATE '2012-07-01' 

Он должен быть в этом формате (YYYY-MM-DD) для работы.

+0

Спасибо Бен за ваше предложение !! Поэтому, когда я вставляю дату, используя SYSDATE, она будет хранить соответственно дату и время. и получить то же самое мне нужно, чтобы сократить дату, чтобы получить результат? – Aspirant

+0

@ Аспирант, если вы хотите добиться результата за этот день, да. Не забывайте, что 'sysdate' постоянно изменяется, поэтому, как только вы вставили запись и попытаетесь ее выбрать,' sysdate' будет «отмечен» на несколько секунд, а дата не будет _exactly_ одинаковой. Играйте и смотрите сами :-) – Ben

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