【问题标题】:compare two dates in oracle在oracle中比较两个日期
【发布时间】:2013-09-27 05:19:48
【问题描述】:

(我正在使用 Oracle10g & Java(JDBC & Servlets))

以下是我比较 ETIMEsysdate 的查询。

如果 ETIME+7days 大于 sysdate 那么我想选择 Y 并且如果 ETIME+7days 小于 sysdate 我要选择N

select USER, 
       CASE WHEN to_date(ETIME+7, 'YYYY-MON-DD HH24:MI:SS') >= to_date(sysdate, 'YYYY-MON-DD HH24:MI:SS')
            THEN 'Y' ELSE 'N' END THE_TIME
from TABLE_NAME
where THE_KEY='123456789'

[注意:在THE_KEY 的数据库中ETIME 的值为27/09/2013]

以上查询今天返回N。几天前它返回Y。所以我认为我对两个日期的比较是错误的。

任何建议将不胜感激。

【问题讨论】:

    标签: java sql oracle


    【解决方案1】:

    您不必使用to_date 函数。直接比较日期:

    select USER, 
           CASE WHEN ETIME+7 >= sysdate
                THEN 'Y' ELSE 'N' END THE_TIME
    from TABLE_NAME
    where THE_KEY='123456789'
    

    您可以检查原始查询出错的原因。运行以下查询,看看to_date 函数如何转换日期。

    select
      sysdate,
      to_date(sysdate, 'YYYY-MON-DD HH24:MI:SS')
    from dual
    

    to_date 函数的第一个参数应该是日期字符串,如'2013-SEP-27 05:29:26',而不是日期本身。

    【讨论】:

      【解决方案2】:

      这样试试,

      with t(user, etime, the_key) AS 
      (
      SELECT 1, SYSDATE - 1, '12345678' FROM dual
      UNION
      SELECT 2, SYSDATE - 8, '12345678' FROM dual
      )
      SELECT user, CASE WHEN ETIME + 7 >= sysdate
                     THEN 'Y' 
                   ELSE 'N' END THE_TIME
      FROM t
      where THE_KEY='12345678';
      

      【讨论】:

        【解决方案3】:

        除了使用to_date() 之外,我没有发现任何问题。这里唯一的可能是 ETIME 在一段时间内保持不变,从您的前几天到今天。

        看看这个例子:-

        几天前(2013 年 9 月 23 日)

        ETIME = 2013 年 9 月 19 日

        ETIME + 7 = 2013 年 9 月 26 日

        因此,您的结果是 Y(因为 sysdate 小于 ETIME + 7)

        今天(2013 年 9 月 27 日)

        ETIME = 2013 年 9 月 19 日 // 相同

        ETIME + 7 = 2013 年 9 月 26 日 // 相同

        因此,您的结果是 N(因为您的 sysdate 大于 ETIME + 7)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-05
          • 2021-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多