我有一個具有以下字段的表:甲骨文:不是一個有效的一個月
報告(表名) Rep_Date(日期) Rep_Time(日期)
的Rep_Time字段值類似'01/01/1753 07:30:00'即時間部分是相關的。我寫了下面的查詢:
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
查詢的派生表的一部分運行,但是當我運行整個查詢,我得到一個錯誤:「不是有效的月份」。爲什麼是這樣?
爲了幫助調試,如果我運行以下查詢:
select rep_date, rep_time from reports where pid=61 and rownum=1
我得到:
Rep_Date = 01/04/2009
Rep_Time = 01/01/1753 13:00:00
UPDATE 15:58 我現在可以執行以下查詢:
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
不過,我需要向WHERE
子句添加一條語句,比較MaxDate的時間部分與rep_time:to_date(to_char(maxdate,'MM/DD/YYYY'),'MM/DD/YYYY') = REP_DATE
不起作用。
在回答你的問題MaxDate是一個DateTime和REP_DATE是一個日期。 Trunc(MaxDate)= rep_date做什麼? – w0051977
trunc(date)將刪除時間組件(實際上,它使得時間組件爲零,對於諸如REP_DATE的日期列就是這種情況。在Oracle中沒有像日期那樣的東西。) –
+1,謝謝作品。你能解釋一下如何在我接受之前獲取日期時間的時間部分嗎? to_date(to_char(maxdate,'HH24:MI:SS'),'HH24:MI:SS')似乎不起作用。 – w0051977