我有一个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