【问题标题】:comparing current day of Date type with Varchar day column in Oracle将日期类型的当前日期与 Oracle 中的 Varchar 日期列进行比较
【发布时间】:2010-08-12 13:45:19
【问题描述】:

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

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

【问题讨论】:

    标签: oracle date compare


    【解决方案1】:

    我认为问题出在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 比较区分大小写。

    【讨论】:

    • 这就是问题所在。谢谢文森特
    【解决方案2】:

    您的查询在我看来是合理的,我会仔细检查 to_char(sysdate, 'day') 是否确实按照您的预期返回星期四。

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

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

    【讨论】:

    • 是的,它确实返回星期四(所有小写字符与我的表格中的完全相同)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多