2012-09-26 76 views
19

Tôi có một trường timestamp và tôi chỉ muốn so sánh các phần cập nhật của nó trong truy vấn của tôi trong OracleOracle so sánh timestamp với ngày

Làm thế nào để làm điều đó,

SELECT * 
FROM Table1 
WHERE date(field1) = '2012-01-01' 
+2

Bạn không nên ** dựa vào chuyển đổi dữ liệu ngầm. ''2012-01-01'' không phải là một ngày, nó là ký tự chữ. Bạn nên luôn luôn sử dụng 'to_date()' hoặc ANSI DATE literal để đảm bảo rằng SQL của bạn không bị vỡ khi cài đặt NLS khác nhau. –

Trả lời

37

Bạn có thể truncate sự phần ngày:

select * from table1 where trunc(field1) = to_date('2012-01-01', 'YYYY-MM-DD') 

Sự cố với phương pháp này là bất kỳ chỉ mục nào trên field1 sẽ không được sử dụng do cuộc gọi hàm.

Ngoài ra (và chỉ số thân thiện hơn)

select * from table1 
where field1 >= to_timestamp('2012-01-01', 'YYYY-MM-DD') 
    and field1 < to_timestamp('2012-01-02', 'YYYY-MM-DD') 
3

Bạn có thể cắt ngắn ngày

SELECT * 
FROM Table1 
WHERE trunc(field1) = to_Date('2012-01-01','YYY-MM-DD') 

Nhìn vào SQL Fiddle để biết thêm ví dụ.

0

to_date định dạng hoạt động cho tôi. Vui lòng xem xét định dạng ngày: MON-, MM, ., -.

t.start_date >= to_date('14.11.2016 04:01:39', 'DD.MM.YYYY HH24:MI:SS') 
t.start_date <=to_date('14.11.2016 04:10:07', 'DD.MM.YYYY HH24:MI:SS')