2015-05-19 4 views
3

Я форматирую поле временной метки в формате «DD/MM/YYYY», чтобы получить все обработанные записи в эту дату.Oracle to_date проблема форматирования SQL,

select count(*) from task_log where to_date (event_dt,'DD/MM/YYYY')= to_date('19/05/2015','DD/MM/YYYY'); 

Вышеуказанный запрос возвращает 0 счет.

select count(*) from task_log where to_date (event_dt,'DD/MM/YYYY')= to_date('19/05/0015','DD/MM/YYYY'); 

Приведенный выше запрос возвращает 29 отсчетов.

Если я бегу:

select event_dt from task_log where to_date (event_dt,'DD/MM/YYYY')= to_date('19/05/0015','DD/MM/YYYY'); 
EVENT_DT 
5/19/2015 9:35:23 AM 
5/19/2015 9:35:23 AM 
5/19/2015 9:37:22 AM 
5/19/2015 9:37:23 AM 
5/19/2015 9:37:32 AM 
5/19/2015 9:37:53 AM 

и так далее ...

select to_date (event_dt,'DD/MM/YYYY') as to_date_Farmatted from task_log 
TO_DATE_FARMATTED 
5/19/0015 
5/19/0015 
5/19/0015 
5/19/0015 
5/19/0015 

Формат to_date форматирования год ?

Как избежать форматирования года до формата 0015? Мне нужен мой год в формате 2015 года. Пожалуйста, помогите мне исправить эту проблему.

+0

MySQL или Oracle? у вас есть оба тега в вашем вопросе – HaveNoDisplayName

+0

Запросы 1 и 2 идентичны, как 1 может вернуть 0, а остальные 29? – xQbert

+0

ИТ в оракуле. Спасибо –

ответ

8

to_date (event_dt, 'DD/MM/YYYY')

На основании вашего ответа на комментарии,

  1. Ваша база данных Oracle
  2. Ваш event_date колонки тип данных: ДАТА.

Никогда не наносите TO_DATE на ДАТА колонке. Это заставляет Oracle в:

  • сначала преобразовать его в строку
  • затем преобразовать его обратно в дату

основе на локализированных NLS настройки. Вам нужно TO_DATE, чтобы преобразовать литерал в дату. Для дата-арифметика, оставьте дату как есть.

Все, что вам нужно сделать, это:

select count(*) 
    from task_log 
    where trunc(event_dt) = to_date('19/05/2015','DD/MM/YYYY'); 

Теперь улов является функция TRUNC. Помните, что DATE имеет как элементы datetime. Таким образом, вы должны иметь в виду временную часть, сравнивая две даты.

TRUNC будет подавлять любые обычные индекс использование. Лучше использовать параметр Date Range.

Например,

select count(*) 
    from task_log 
    where event_date 
between to_date('19/05/2015','DD/MM/YYYY') 
    and to_date('19/05/2015','DD/MM/YYYY') + 1; 
+1

Его работы. Удачи, пожалуйста, удалите] из запроса. Спасибо за вашу помощь и время на это. –

+0

@VSRSarmaChinta Добро пожаловать! На самом деле было добавлено много информации, и мне нужно было что-то отформатировать. Надеюсь, это тебе помогло. –

Смежные вопросы