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'
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'
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')
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ụ.
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')
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. –