簡體   English   中英

to_char和to_date返回不同​​的輸出

[英]to_char and to_date are returning different output

我正在使用以下查詢。

select sysdate from dual where to_char(sysdate,'DD-MM-YY')='28-MAY-13';

並且輸出為空。 但是對於以下查詢,輸出為當前日期。

select sysdate from dual where to_date(sysdate,'DD-MM-YY')= to_date('28-MAY-13','DD-MM-YY');

為什么to_char函數不能返回sysdate?

我們不應該使用to_char比較日期嗎?

關於:我們不應該使用to_char比較日期嗎?

不,我們不應該。 我們應該使用to_char格式化日期以用於顯示。 如果您有其他原因,可能是個壞主意。

在oracle中比較日期時,請記住,oracle日期包含時間。 查看值是否在日期范圍內的最佳方法是:

where myDateField >= date1
and myDateField < the day after date2

當您的日期范圍是今天時,請執行以下操作:

where myDateField >= trunc(sysdate)
and myDateField < trunc(sysdate + 1 )

如果要將其與作為字符串的輸入參數進行比較,請使用to_date將字符串轉換為日期,然后實施相同的基本思想。

嘗試將“ DD-MON-YY”格式映射為“ 28-MAY-13”

“ MM”映射到月份號。

編輯:SQL可以找出在to_date中使用正確的格式; 當看到輸入字符串為“ 28-MAY-13”格式時,它將自動將“ DD-MM-YY”轉換為“ DD-MON-YY”。 但是,to_char不做任何假設; 因此它正在嘗試將“ 28-05-13”與“ 28-MAY-13”進行比較

EDIT2:另外要注意的是DUAL只能返回一行; 所以你可以做

 SELECT sysdate FROM DUAL

Dan Bracuk在日期比較方面有一些好處; 盡可能將它們保留為日期格式。 如果只考慮日期而不考慮時間,則使用trunc(DateTime); 如果您使用'=',這通常是必要的,但如果您檢查BETWEEN,則通常不需要

暫無
暫無

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

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