Фильтрация по дате - PullRequest
       1

Фильтрация по дате

0 голосов
/ 02 февраля 2012

У меня есть столбец типа Дата, где значения в этом формате

1.1.2012 10:10:11

Мне нужно создать фильтр, который бы фильтровал эти значения по дням, месяцам и годам.

Я пробовал

where like '% 1.1.2012 %'

но это, похоже, не работает.

Ответы [ 3 ]

2 голосов
/ 02 февраля 2012

Oracle не сохраняет отформатированное поле даты, но вы можете отформатировать вывод с помощью функции to_char. Например:

select to_char(date_field,'dd/mm/yyyy hh24:mi:ss')

Если вы запрашиваете дату без форматирования, формат вывода будет зависеть от используемого вами инструмента и вашего параметра NLS_DATE .

Для фильтрации дат в Oracle вы можете использовать функцию to_date, которая получает строку и анализирует дату в каком-то определенном формате. Вы можете увидеть все варианты to_date здесь

Параметры для фильтрации вашего поля даты:

where date_field between to_date('1.1.2012 00:00','d.m.yyyy hh24:mi') and to_date('1.1.2012 23:59','d.m.yyyy hh24:mi')

-- you possibly will lost some performance with this second one 
where trunc(date_field) =  to_date('1.1.2012','d.m.yyyy')
2 голосов
/ 02 февраля 2012

В MSSQL вы можете использовать функции даты, с которыми легко работать. Один из способов будет выглядеть так:

where Year (date) = 2012
and Month(date) = 1
and Day (date) = 1

Но есть и другие решения. Взгляните на следующую страницу для получения дополнительной информации: http://msdn.microsoft.com/en-us/library/ms186724.aspx

Я недавно работал со строковыми представлениями datetime-значений. Рекомендую не делать этого и всегда работать с датами, из-за совместимости, если говорить о MSSQL-сервере.

Если вы используете строковые представления значений даты и времени, вам нужно быть очень осторожным с форматами на других языковых настройках, чем на вашем собственном сервере. Строки могут интерпретироваться по-разному на других серверах (формат ISO или формат US).

1 голос
/ 02 февраля 2012

Одной из возможностей было бы сделать что-то вроде этого:

WHERE date_and_time >=to_date( '01.01.2012','dd.mm.yyyy') and date_and_time <= to_date('01.01.2012','dd.mm.yyyy');

date_and_time - имя вашего столбца Date.

редактировать: это для Oracle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...