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

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

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

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

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

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

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

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

45
задан Hash 12 September 2016 в 07:19
поделиться

4 ответа

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));
92
ответ дан 26 November 2019 в 21:06
поделиться

Попробуйте следующий способ.

Select * from t1 where date(col_name)="8/3/2010" 
0
ответ дан 26 November 2019 в 21:06
поделиться

Лично я обычно использую:

select * 
from   t1
where  date between trunc( :somedate )          -- 00:00:00
            and     trunc( :somedate ) + .99999 -- 23:59:59
3
ответ дан 26 November 2019 в 21:06
поделиться

Вы можете использовать функцию between, чтобы получить все записи между 2010-08-03 00:00:00:000 и 2010-08-03 23:59:59:000

2
ответ дан 26 November 2019 в 21:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: