Oracle:如何在where子句中按日期和时间进行过滤

Bob*_*Bob 13 sql oracle

我怎样才能做到这一点:

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

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

wwe*_*ker 11

在您提供的示例中,没有任何内容会引发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');
Run Code Online (Sandbox Code Playgroud)

就像这个例子一样:

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');
Run Code Online (Sandbox Code Playgroud)

所以一定有别的东西是错的.


Mow*_*gli 7

这么说吧

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')) 
Run Code Online (Sandbox Code Playgroud)

其中 R 是表名。
TIME_STAMP 是表 R 中的字段名称。


Edd*_*wad 5

如果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
Run Code Online (Sandbox Code Playgroud)


Vad*_*zim 0

显然 '12/01/2012 13:16:32.000' 与 'DD-MON-YYYY hh24:mi' 格式不匹配。

更新:

您需要“MM/DD/YYYY hh24:mi:ss.ff”格式并使用 TO_TIMESTAMP 而不是 TO_DATE,因为日期在 Oracle 中不包含毫秒。