2014-12-17 4 views
-1

Я пишу этот запрос, чтобы найти данные между двумя датами. Формат времени у меня есть, так же, как тот, который я использую в запросеФормат даты, ORACLE

select TO_CHAR(REC_NO),(FIRSTNAME ||' '|| LASTNAME) as NAME, 
      LOC_NAME,TO_CHAR(START_TIME,'yyyy/mm/dd/HH:MI:SS'), 
      TO_CHAR(END_TIME,'yyyy/mm/dd/HH:MI:SS'), 
      TT_NO,CUST_ID,CUST_MOB,MAC_ADDR,EMAIL_ID,s.STATUS 
    from vw_rtb_visit_assn v 
left join [email protected] s on v.TT_NO = s.TICKETNUMBER and TT_NO = '123' 
     and v.ASSN_TIME between to_date('Tue Dec 16 00:00:00 PKT 2014','yyyy/mm/dd') 
     and to_date('Wed Dec 17 00:00:00 PKT 2014','yyyy/mm/dd') 

Мой запрос не выполняется и дает мне исключение формата.

+1

Ваши вызовы 'to_date' ошибочны, вы должны прочитать документацию по форматированию даты: https://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm#SQLRF00210 – mavroprovato

+0

' to_date (' Wed Dec 17 00:00:00 PKT 2014 ',' yyyy/mm/dd ') 'не имеет никакого смысла. Маска формата, которую вы предоставляете, даже не дистанционно выравнивается с литералом. –

+0

Вам не нужно выполнять синтаксический анализ строк, просто укажите даты как литералы даты, например 'DATE '2014-12-16''. Литерал даты - это фактическое значение даты, а не строка, которая требует синтаксического анализа в определенном формате. –

ответ

3

дату не в фактическом формате этого конкретного персонажа вы передаете в котором условие

to_date('Tue Dec 16 00:00:00 PKT 2014','yyyy/mm/dd') 

должно быть

to_date('Tue Dec 16 00:00:00 PKT 2014','DY MON DD HH24:MI:SS TZD YYYY') 
+0

вы должны проверить комментарий mavroprovato перед его внедрением. – Exhausted

1

Формат DATE_IN_CHAR и FORMAT в to_date ('DATE_IN_CHAR', 'FORMAT') должен совпадать.

любезно попробовать ниже

and v.ASSN_TIME between to_date('2014/12/16','yyyy/mm/dd') 
    and to_date('2014/12/17','yyyy/mm/dd') 
1

Даты сделать не имеют форматов. Форматы используются для разбора строк в виде дат или генерации строк из дат. Вам не нужно делать какие-либо из них, вам просто нужно указать интервал в качестве даты буквального, как описано in the documentation, например:

and v.ASSN_TIME between DATE '2014-12-16' AND DATE '2014-12-17' 

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

Вы также можете указать TIMESTAMP литералов

TIMESTAMP '1997-01-31 09:26:50.124' 

или

TIMESTAMP '1997-01-31 09:26:56.66 +02:00' 

для TIMESTAMP С TIMEZONE.

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