Tôi có một bảng với các lĩnh vực sau:Oracle: không phải là một tháng hợp lệ
Báo cáo (tên bảng) Rep_Date (ngày) Rep_Time (ngày)
Trường Rep_Time có giá trị như '01/01/1753 07:30:00 'tức là phần thời gian có liên quan. Tôi đã viết truy vấn sau:
select Reports.pid, MaxDate from Reports
INNER JOIN (
select pid, max(TO_DATE(TO_CHAR(REP_DATE, 'DD/MM/YYYY')
|| TO_CHAR(REP_TIME, 'HH24:MI:SS'), 'DD/MM/YYYY HH24:MI:SS')) As MaxDate
from reports
group by pid
) ReportMaxDate
on Reports.PID = ReportMaxDate.PID
AND To_Date(To_Char(MaxDate, 'DD/MM/YYYY')) = REP_DATE
WHERE REPORTS.PID=61
Phần bảng dẫn xuất của truy vấn chạy, nhưng khi tôi chạy toàn bộ truy vấn tôi gặp lỗi: "không phải là tháng hợp lệ". Tại sao điều này?
Để giúp gỡ lỗi việc này; nếu tôi chạy truy vấn sau đây:
select rep_date, rep_time from reports where pid=61 and rownum=1
tôi nhận được:
Rep_Date = 01/04/2009
Rep_Time = 01/01/1753 13:00:00
CẬP NHẬT 15:58 bây giờ tôi có thể thực hiện các truy vấn sau đây:
select Reports.pid, MaxDate from Reports
INNER JOIN (
select pid, max(TO_DATE(TO_CHAR(REP_DATE, 'DD/MM/YYYY')
|| TO_CHAR(REP_TIME, 'HH24:MI:SS'), 'DD/MM/YYYY HH24:MI:SS')) As MaxDate
from reports group by pid
) ReportMaxDate
on Reports.PID = ReportMaxDate.PID
AND to_date(to_char(maxdate,'MM/DD/YYYY'),'MM/DD/YYYY') = REP_DATE
WHERE REPORTS.PID=61
Tuy nhiên, tôi cần thêm một câu lệnh nữa vào mệnh đề WHERE
so sánh phần thời gian của MaxDate với rep_time: to_date(to_char(maxdate,'MM/DD/YYYY'),'MM/DD/YYYY') = REP_DATE
không hoạt động.
Trong câu trả lời cho câu hỏi của bạn MaxDate là DateTime và REP_DATE là ngày. Trunc (MaxDate) = rep_date DO là gì? – w0051977
trunc (ngày) sẽ loại bỏ thành phần thời gian (thực tế, nó làm cho thành phần thời gian bằng 0, đó là trường hợp có cột ngày tháng như REP_DATE. Không có điều nào như ngày tháng trong Oracle.) –
+1, cảm ơn nó công trinh. Bạn có thể giải thích làm thế nào để có được thành phần thời gian của một datetime trước khi tôi chấp nhận? to_date (to_char (maxdate, 'HH24: MI: SS'), 'HH24: MI: SS') dường như không hoạt động. – w0051977