将Date类型的当前日期与Oracle中的Varchar日期列进行比较

时间:2010-08-12 13:45:19

标签: oracle date compare

我有一个Varchar日期列,我想选择日期列中的日期与系统中当前日期匹配的所有行。我想出了这个查询,但它没有找到任何匹配,虽然今天是星期四,并且星期四存储在日期列中。我不确定这是否是将日期数据类型与varchar进行比较的正确方法。

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

2 个答案:

答案 0 :(得分: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比较区分大小写。

答案 1 :(得分:1)

您的查询对我来说看起来很合理,我会仔细检查to_char(sysdate,'day')实际上是否按预期返回。

另外,在这种情况下,您不需要使用子查询。一个更简单但等效的查询是:

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