Oracle: как фильтровать по дате и времени в предложении where - PullRequest
11 голосов
/ 12 января 2012

Как я могу это сделать:

select *
from tableName
where SESSION_START_DATE_TIME > To_Date ('12-Jan-2012 16:00', 'DD-MON-YYYY hh24:mi' )

SESSION_START_DATE_TIME в формате '12 / 01/2012 13: 16: 32.000 '

Я пытался where To_Date (SESSION_START_DATE_TIME, 'DD-MON-YYYY hh24:mi') > To_Date ('12-Jan-2012 16:00', 'DD-MON-YYYY hh24:mi' )

но что бы я ни пытался, я получаю ошибку: SQL command not properly formed

Ответы [ 5 ]

8 голосов
/ 12 января 2012

В приведенном вами примере нет ничего, что могло бы выдать ошибку SQL command not properly formed. Как вы выполняете этот запрос? Что ты нам не показываешь?

Этот пример скрипта работает нормально:

create table tableName
(session_start_date_time DATE);

insert into tableName (session_start_date_time) 
values (sysdate+1);

select * from tableName
where session_start_date_time > to_date('12-Jan-2012 16:00', 'DD-MON-YYYY hh24:mi');

Как и в этом примере:

create table tableName2
(session_start_date_time TIMESTAMP);

insert into tableName2 (session_start_date_time) 
values (to_timestamp('01/12/2012 16:01:02.345678','mm/dd/yyyy hh24:mi:ss.ff'));

select * from tableName2
where session_start_date_time > to_date('12-Jan-2012 16:00', 'DD-MON-YYYY hh24:mi');

select * from tableName2
where session_start_date_time > to_timestamp('01/12/2012 14:01:02.345678','mm/dd/yyyy hh24:mi:ss.ff');

Так что должно быть что-то еще, что не так.

5 голосов
/ 12 января 2012

Если SESSION_START_DATE_TIME имеет тип TIMESTAMP, вы можете попробовать использовать функцию SQL TO_TIMESTAMP.Вот пример:

     SQL> CREATE TABLE t (ts TIMESTAMP);

     Table created.

     SQL> INSERT INTO t
       2       VALUES (
       3                 TO_TIMESTAMP (
       4                    '1/12/2012 5:03:27.221008 PM'
       5                   ,'mm/dd/yyyy HH:MI:SS.FF AM'
       6                 )
       7              );

     1 row created.

     SQL> SELECT *
       2    FROM t
       3   WHERE ts =
       4            TO_TIMESTAMP (
       5               '1/12/2012 5:03:27.221008 PM'
       6              ,'mm/dd/yyyy HH:MI:SS.FF AM'
       7            );
     TS
     -------------------------------------------------
     12-JAN-12 05.03.27.221008 PM
1 голос
/ 22 февраля 2013

Скажи это так

where ("R"."TIME_STAMP">=TO_DATE ('03-02-2013 00:00:00', 'DD-MM-YYYY HH24:MI:SS')
   AND "R"."TIME_STAMP"<=TO_DATE ('09-02-2013 23:59:59', 'DD-MM-YYYY HH24:MI:SS')) 

Где R - имя таблицы.
TIME_STAMP - это имя поля в таблице R.

0 голосов
/ 12 января 2012

Попробуйте:

To_Date (SESSION_START_DATE_TIME, 'MM/DD/YYYY hh24:mi') > 
To_Date ('12-Jan-2012 16:00', 'DD-MON-YYYY hh24:mi' )
0 голосов
/ 12 января 2012

Очевидно, что '12 / 01/2012 13: 16: 32.000 'не соответствует' формату DD-MON-YYYY hh24: mi '.

Обновление:

Вам нужен' MM/ DD / YYYY hh24: mi: ss.ff 'и использование TO_TIMESTAMP вместо TO_DATE, потому что даты не содержат миллис в оракуле.

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