我有一個Varchar日期列,並且我希望選擇當日日期列與系統當前日期匹配的所有行。我想出了這個查詢,但沒有找到任何匹配,雖然今天是星期四,星期四存儲在日欄中。我不確定這是否是將日期數據類型與varchar進行比較的正確方法。將日期類型的當前日期與Oracle中的Varchar日期列進行比較
select * from schedule
where day = (select to_char(sysdate,'day') from dual);
我有一個Varchar日期列,並且我希望選擇當日日期列與系統當前日期匹配的所有行。我想出了這個查詢,但沒有找到任何匹配,雖然今天是星期四,星期四存儲在日欄中。我不確定這是否是將日期數據類型與varchar進行比較的正確方法。將日期類型的當前日期與Oracle中的Varchar日期列進行比較
select * from schedule
where day = (select to_char(sysdate,'day') from dual);
我認爲問題源於一個事實,即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比較區分大小寫。
您的查詢似乎合理的,我,我會仔細檢查TO_CHAR(SYSDATE,「天」)如您所願實際上返回週四。
請注意,在這種情況下,您不需要使用子查詢。一個簡單,但等效查詢:
select * from schedule where day = to_char(sysdate, 'day');
是的,它確實返回星期四(所有小寫字符與我的表中完全相同) – Mike55 2010-08-12 14:06:26
這是問題所在。謝謝Vincent – Mike55 2010-08-12 14:10:35
+1 - 很好的接收 – dpbradley 2010-08-12 14:42:09