簡體   English   中英

Oracle SQL 日期比較

[英]Oracle SQL date comparison

為什么如果 date1 是日期類型,其值為:31-DIC-99 00:00:00

這個指令是真的

to_char(date1) = to_char(TO_DATE('9999-12-31', 'yyyy-MM-dd'))

這是假的嗎?

date1 = TO_DATE('9999-12-31', 'yyyy-MM-dd')

謝謝

Oracle 中的日期具有時間分量——即使在打印出這些值時您沒有看到它們。 當您將該值轉換為未指定格式的字符串時,時間分量將設置為零。

我建議將邏輯編寫為:

 trunc(date1) = date '9999-12-31'

或者,如果您願意:

date1 >= date '9999-12-31'

您指的是最大日期值,因此沒有較大值的日期。 . . 但在同一日期有更大的值與時間。

我不建議將日期轉換為字符串,除了 output 目的(或者如果出於非常特定的原因需要)。 日期/時間函數通常足以用於日期/時間值的操作。

在這里,您的第一個條件為真,因為您在雙方都使用TO_CHAR ,它將兩個日期轉換為相同的字符串。 (字符串比較)

to_char(date1) = to_char(TO_DATE('9999-12-31', 'yyyy-MM-dd'))

假設NLS_DATE_FORAMTdd.mon.rrrr那么你的比較將是

to_char(date1,'dd.mon.rrrr') = to_char(TO_DATE('9999-12-31', 'yyyy-MM-dd'),'dd.mon.rrrr')

第二個條件不成立,因為雙方不同 - date1 可能有時間部分,而右側表達式沒有。

date1 = TO_DATE('9999-12-31', 'yyyy-MM-dd')

date1 包含時間部分,因此如果它們在秒精度之前相同,則一個日期將與第二個日期相同。

您可以使用 trunc 從 date1 中刪除時間部分:

trunc(date1) = TO_DATE('9999-12-31', 'yyyy-MM-dd')

暫無
暫無

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

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