Выберите из таблицы, зная только дату без времени (ORACLE)
Я пытаюсь извлечь записи из таблицы, зная, что дата в столбце содержит дату и время.
Предположим, что у меня есть таблица с именем t1
, которая содержит только два столбца name
и date
соответственно.
Данные, хранящиеся в столбце date, такие как 8/3/2010 12:34:20 PM
.
Я хочу получить эту запись по этому запросу, например (обратите внимание, что я не помещаю время):
Select * From t1 Where date="8/3/2010"
Этот запрос ничего не дает мне!
Как я могу получить date
, зная только date
без времени?
Ответы
Ответ 1
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
без параметра удаляет часы, минуты и секунды с DATE
.
Если производительность действительно имеет значение, рассмотрите возможность размещения Function Based Index
в этом столбце:
CREATE INDEX trunc_date_idx ON t1(TRUNC(your_date));
Ответ 2
Лично я обычно иду:
select *
from t1
where date between trunc( :somedate ) -- 00:00:00
and trunc( :somedate ) + .99999 -- 23:59:59
Ответ 3
Вы можете использовать функцию между функциями для получения всех записей между 2010-08-03 00: 00: 00: 000 AND 2010-08-03 23: 59: 59: 000
Ответ 4
Преобразуйте столбец даты в правильный формат и сравните:
SELECT * From my_table WHERE to_char(my_table.my_date_col,'MM/dd/yyyy') = '8/3/2010'
Эта часть
to_char(my_table.my_date_col,'MM/dd/yyyy')
В результате появится строка '8/3/2010'
Ответ 5
Попробуйте выполнить следующее.
Select * from t1 where date(col_name)="8/3/2010"
Ответ 6
trunc(my_date,'DD')
предоставит вам только дату, а не время в Oracle.