簡體   English   中英

在 2 個日期之間選擇值時得到不正確的結果

[英]Getting Incorrect results for selecting values between 2 dates

我正在嘗試運行以下查詢以選擇 2 個日期之間的一些結果,但由於條件不存在,我得到了結果。 那么這里有什么問題呢?

select OPEN_TIME, STATUS 
from PROBSUMMARY 
where trunc (open_time) >= '01-01-2020' 
  and trunc (open_time) < '01-01-2021'

您正在將日期與字符串進行比較; 日期被轉換為字符串以進行比較。 從文檔

SELECT FROM操作期間,Oracle 將列中的數據轉換為目標變量的類型。

當您的日期被隱式轉換為字符串時,根據 字符值比較規則,它們都屬於該字符串值范圍。

以上當然不是真的。 這取代了它:

將字符值與DATE值進行比較時,Oracle 會將字符數據轉換為DATE

因此,在隱式轉換中發生了一些奇怪的事情,這取決於您的NLS_DATE_FOPRMAT設置。 無論如何,以下建議仍然有效......

將日期與日期進行比較,使用to_date()或日期文字轉換您的字符串:

where open_time >= date '2020-01-01' and open_time < date '2021-01-01'

您不需要將日期截斷到午夜; 如果合適,這將有助於能夠使用索引。

試試這個,

SELECT OPEN_TIME, STATUS
FROM PROBSUMMARY
WHERE OPEN_TIME < '01-01-2020' AND OPEN_TIME > '01-01-2021';

以上 where 條件 start_date 包含日期但 end_date 不包含,對於包含兩個日期,您必須使用=

確保您的通過日期必須遵循 mysql 的語法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM