Я пытаюсь получить записи от таблицы путем знания, что дата в столбце содержит дату и время.
Предположим, что мне назвали таблицу t1
который содержит только два столбца name
и date
соответственно.
Данные, хранившие на дате столбца как это 8/3/2010 12:34:20 PM
.
Я хочу получить эту запись этим запросом, например (обратите внимание, что я не помещаю время):
Select * From t1 Where date="8/3/2010"
Этот запрос ничего не дает мне!
Как я могу получить date
путем знания только date
без времени?
DATE
- зарезервированное ключевое слово в Oracle, поэтому я использую вместо него столбец с именем your_date
.
Если у вас есть индекс на your_date
, я бы использовал
WHERE your_date >= TO_DATE('2010-08-03', 'YYYY-MM-DD')
AND your_date < TO_DATE('2010-08-04', 'YYYY-MM-DD')
или BETWEEN
:
WHERE your_date BETWEEN TO_DATE('2010-08-03', 'YYYY-MM-DD')
AND TO_DATE('2010-08-03 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
Если нет индекса или если записей не слишком много,
WHERE TRUNC(your_date) = TO_DATE('2010-08-03', 'YYYY-MM-DD')
будет достаточно. TRUNC
без параметра удаляет часы, минуты и секунды из ДАТЫ
.
Если производительность действительно важна, подумайте о том, чтобы установить индекс на основе функций
на этот столбец:
CREATE INDEX trunc_date_idx ON t1(TRUNC(your_date));
Попробуйте следующий способ.
Select * from t1 where date(col_name)="8/3/2010"
Лично я обычно использую:
select *
from t1
where date between trunc( :somedate ) -- 00:00:00
and trunc( :somedate ) + .99999 -- 23:59:59
Вы можете использовать функцию between, чтобы получить все записи между 2010-08-03 00:00:00:000 и 2010-08-03 23:59:59:000