嗨,我正在嘗試撰寫我需要三個不同日期的資料的查詢,所以我正在像這樣撰寫下面的查詢,但我無法正確獲取資料
SELECT tr_name
FROM RT_TRANSAPORT RT
WHERE
(RT.TR_DATE BETWEEN TO_DATE('08/11/2021','dd/mm/yyyy') AND TO_DATE('08/11/2021','dd/mm/yyyy'))
OR
(RT.KM_DATE BETWEEN TO_DATE('08/11/2021','dd/mm/yyyy') AND TO_DATE('08/11/2021','dd/mm/yyyy'))
OR
(FU.TY_DATE BETWEEN TO_DATE('08/11/2021','dd/mm/yyyy') AND TO_DATE('08/11/2021','dd/mm/yyyy'))
OR
(FU.AT_DATE BETWEEN TO_DATE('08/11/2021','dd/mm/yyyy') AND TO_DATE('08/11/2021','dd/mm/yyyy'))
請告訴我哪里出錯了
uj5u.com熱心網友回復:
首先:當Oracle 呼叫資料型別時DATE,它實際上是一個日期時間,即它由日期部分和時間部分組成。時間部分可以設定為00:00:00,可以認為是午夜的那一天,也可以是不分時間的那一天。這意味著這有待解釋。
您有一個名為TR_DATE. 您是否僅存盤日期(即時間設定為 00:00:00)?或者這是用詞不當(而應該稱為 tr_datetime)?如果你真的存盤了一個日期時間,那么
rt.tr_date BETWEEN DATE '2021-11-08' AND DATE '2021-11-08'
只會檢索時間設定為午夜的行,而忽略該日期的所有其他行。日期時間 '2021-11-08 00:00:01' 將被解雇。
為了解決這個問題,我們通常這樣看日期:
rt.tr_date >= DATE '2021-11-08' AND rt.tr_date < DATE '2021-11-09'
無論您是否存盤時間部分,這都為我們提供了完整的“2021-11-08”。
你說你的查詢得到一個起始日期和一個截止日期。因此:
rt.tr_date >= :from_date AND rt.tr_date < :to_date INTERVAL '1' DAY
uj5u.com熱心網友回復:
在 Oracle 中,aDATE是一種二進制資料型別,它始終具有組件年、月、日、小時、分鐘和秒。客戶端應用程式通常只會顯示年-月-日組件,但時間組件仍然始終存在(即使您沒有顯示它們)。
如果要存盤DATE帶有時間組件的a ,則需要匹配當天的整個時間范圍,并且可以使用以下方法執行此操作:
SELECT tr_name
FROM RT_TRANSAPORT RT
WHERE ( RT.TR_DATE >= TO_DATE('08/11/2021','dd/mm/yyyy')
AND RT.TR_DATE < TO_DATE('08/11/2021','dd/mm/yyyy') INTERVAL '1' DAY)
OR ( RT.KM_DATE >= TO_DATE('08/11/2021','dd/mm/yyyy')
AND RT.KM_DATE < TO_DATE('08/11/2021','dd/mm/yyyy') INTERVAL '1' DAY)
OR ( FU.TY_DATE >= TO_DATE('08/11/2021','dd/mm/yyyy')
AND FU.TY_DATE < TO_DATE('08/11/2021','dd/mm/yyyy') INTERVAL '1' DAY)
OR ( FU.AT_DATE >= TO_DATE('08/11/2021','dd/mm/yyyy')
AND FU.AT_DATE < TO_DATE('08/11/2021','dd/mm/yyyy') INTERVAL '1' DAY)
或者
SELECT tr_name
FROM RT_TRANSAPORT RT
WHERE ( RT.TR_DATE >= DATE '2021-11-08'
AND RT.TR_DATE < DATE '2021-11-08' INTERVAL '1' DAY)
OR ( RT.KM_DATE >= DATE '2021-11-08'
AND RT.KM_DATE < DATE '2021-11-08' INTERVAL '1' DAY)
OR ( FU.TY_DATE >= DATE '2021-11-08'
AND FU.TY_DATE < DATE '2021-11-08' INTERVAL '1' DAY)
OR ( FU.AT_DATE >= DATE '2021-11-08'
AND FU.AT_DATE < DATE '2021-11-08' INTERVAL '1' DAY)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/353207.html
