2010-08-12 52 views
2

我有一個Varchar日期列,並且我希望選擇當日日期列與系統當前日期匹配的所有行。我想出了這個查詢,但沒有找到任何匹配,雖然今天是星期四,星期四存儲在日欄中。我不確定這是否是將日期數據類型與varchar進行比較的正確方法。將日期類型的當前日期與Oracle中的Varchar日期列進行比較

select * from schedule 
where day = (select to_char(sysdate,'day') from dual); 

回答

9

我認爲問題源於一個事實,即to_char功能空間的填充默認:

SQL> SELECT '.' || to_char(SYSDATE + rownum, 'day') || '.' AS "Day" 
    2 FROM dual CONNECT BY LEVEL <= 5; 

Day 
----------- 
.friday . 
.saturday . 
.sunday . 
.monday . 
.tuesday . 

爲了防止填充,使用前綴fm

SQL> select * from dual where to_char(sysdate, 'fmday')='thursday'; 

DUMMY 
----- 
X 

另請注意,VARCHAR比較區分大小寫。

+0

這是問題所在。謝謝Vincent – Mike55 2010-08-12 14:10:35

+0

+1 - 很好的接收 – dpbradley 2010-08-12 14:42:09

1

您的查詢似乎合理的,我,我會仔細檢查TO_CHAR(SYSDATE,「天」)如您所願實際上返回週四。

請注意,在這種情況下,您不需要使用子查詢。一個簡單,但等效查詢:

select * from schedule where day = to_char(sysdate, 'day'); 
+0

是的,它確實返回星期四(所有小寫字符與我的表中完全相同) – Mike55 2010-08-12 14:06:26

相關問題