2012-01-13 31 views
31

Tôi cần tra cứu các hàng nằm trong khung thời gian cụ thể.Oracle SQL: dấu thời gian ở nơi khoản

select * 
from TableA 
where startdate >= '12-01-2012 21:24:00' 
    and startdate <= '12-01-2012 21:25:33' 

tức là tra cứu các hàng có độ chính xác dấu thời gian của giây, làm cách nào để đạt được điều này?

+0

giản đồ của bảng của bạn là gì? – simchona

+0

Điều gì sẽ xảy ra nếu bạn sử dụng truy vấn trong câu hỏi? –

+0

Trường được đề cập là "TIMESTAMP", – sid

Trả lời

71

Bạn cần phải sử dụng to_timestamp() để chuyển đổi chuỗi của bạn đến một giá trị timestamp thích hợp:

to_timestamp('12-01-2012 21:24:00', 'dd-mm-yyyy hh24:mi:ss') 

Nếu cột của bạn là loại DATE (mà cũng hỗ trợ giây), bạn cần phải sử dụng to_date()

to_date('12-01-2012 21:24:00', 'dd-mm-yyyy hh24:mi:ss') 

Để có được điều này vào một nơi mà điều kiện sử dụng như sau:

select * 
from TableA 
where startdate >= to_timestamp('12-01-2012 21:24:00', 'dd-mm-yyyy hh24:mi:ss') 
    and startdate <= to_timestamp('12-01-2012 21:25:33', 'dd-mm-yyyy hh24:mi:ss') 

Bạn không bao giờ cần phải sử dụng to_timestamp() trên một cột đó là kiểu 'timestamp'

Sửa điều chỉnh typo

+0

Tôi gặp lỗi: "ORA-01830: ảnh định dạng ngày kết thúc trước khi chuyển đổi toàn bộ chuỗi đầu vào" đây là truy vấn của tôi: "select * from TableA, nơi To_Timestamp (startdate, 'DD-MM-YYYY HH24: MI: SS ')> To_Timestamp ('12 -01-2012 21:24:00', 'DD-MM-YYYY HH24: MI: SS'); " – sid

+0

Giá trị trong trường là "12-JAN-12 09.24.06.355000000 PM" & trường Thời gian của nó trong oracle db – sid

+0

@ user1095057: bạn không cần phải áp dụng 'to_timestamp()' trên cột của bạn nhưng trên đầu vào của bạn giá trị. Xem chỉnh sửa của tôi. –

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