Подтвердить что ты не робот

Выберите из таблицы, зная только дату без времени (ORACLE)

Я пытаюсь извлечь записи из таблицы, зная, что дата в столбце содержит дату и время.

Предположим, что у меня есть таблица с именем t1, которая содержит только два столбца name и date соответственно.

Данные, хранящиеся в столбце date, такие как 8/3/2010 12:34:20 PM.

Я хочу получить эту запись по этому запросу, например (обратите внимание, что я не помещаю время):

Select * From t1 Where date="8/3/2010"

Этот запрос ничего не дает мне!

Как я могу получить date, зная только date без времени?

4b9b3361

Ответ 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.