2012-01-12 33 views
8

Làm thế nào tôi có thể làm điều này:Oracle: Làm thế nào để lọc theo ngày và thời gian trong một mệnh đề where

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

SESSION_START_DATE_TIME được ghi theo dạng '12/01/2012 13: 16: 32.000'

tôi cố gắng where To_Date (SESSION_START_DATE_TIME, 'DD-MON-YYYY hh24:mi') > To_Date ('12-Jan-2012 16:00', 'DD-MON-YYYY hh24:mi')

nhưng không có vấn đề gì tôi cố gắng tôi nhận được lỗi: SQL command not properly formed

+1

Trường có phải là 'SESSION_START_DATE_TIME' một DATETIME hoặc VARCHAR? – MatBailie

+0

Có phần nào của câu lệnh SQL mà bạn không hiển thị cho chúng tôi không? – wweicker

+0

'DESC TABLENAME;'? Truy vấn của bạn sẽ hoạt động hoàn hảo nếu trường loại 'TIMESTAMP' –

Trả lời

0

Rõ ràng '12/01/2012 13: 16: 32.000' không phù hợp 'DD-MO Định dạng N-YYYY hh24: mi '.

Cập nhật:

Bạn cần 'MM/DD/YYYY hh24: mi: ss.ff' định dạng và sử dụng TO_TIMESTAMP thay vì ngày nguyên nhân TO_DATE không giữ millis trong oracle.

+0

yip, đó là lý do tại sao tôi đã thử cách thứ hai trong bài đăng của mình. Chỉ cần cố gắng tất cả mọi thứ tôi có thể nghĩ đến! – Bob

+0

Tôi đã cập nhật câu trả lời. – Vadzim

0

Hãy thử:

To_Date (SESSION_START_DATE_TIME, 'MM/DD/YYYY hh24:mi') > 
To_Date ('12-Jan-2012 16:00', 'DD-MON-YYYY hh24:mi') 
+0

lỗi tương tự tôi sợ – Bob

5

Trong ví dụ mà bạn đã cung cấp không có gì sẽ ném một lỗi SQL command not properly formed là. Bạn đang thực hiện truy vấn này như thế nào? Bạn không cho chúng tôi thấy điều gì?

Ví dụ này kịch bản hoạt động tốt:

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'); 

Như làm ví dụ này:

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'); 

Vì vậy, phải có cái gì khác đó là sai.

5

Nếu SESSION_START_DATE_TIME thuộc loại TIMESTAMP bạn có thể muốn thử sử dụng hàm SQL TO_TIMESTAMP. Dưới đây là một ví dụ:

 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 
0

Đặt nó theo cách này

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')) 

đâu R là tên bảng.
TIME_STAMP là FieldName trong Bảng R.

Các vấn đề liên quan