【问题标题】:sysdate format not working in where clause with timesysdate 格式在 where 子句中不起作用
【发布时间】:2020-07-08 03:14:31
【问题描述】:

我试图在 PL/SQL 开发人员的 oracle 上运行以下查询,以选择当前时间和一天结束之间的时间段列表:

SELECT T.VISIT_DATE
  FROM REGISTRATION.VU_SCHEDULE T
 WHERE T.VISIT_DATE BETWEEN TO_DATE(SYSDATE, 'DD-MON-YYYY HH24:MI:SS')
 AND   TO_DATE('27-MARCH-2020 23:59:59', 'DD-MON-YYYY HH24:MI:SS')
 ORDER BY VISIT_DATE

但它给了我一整天而不是当前时间的结果

    VISIT_DATE
1   3/27/2020 9:00:00 AM
2   3/27/2020 9:15:00 AM
3   3/27/2020 9:30:00 AM
4   3/27/2020 9:45:00 AM
5   3/27/2020 10:00:00 AM
6   3/27/2020 10:15:00 AM
7   3/27/2020 10:30:00 AM
8   3/27/2020 10:45:00 AM
9   3/27/2020 11:00:00 AM
10  3/27/2020 11:15:00 AM
11  3/27/2020 11:30:00 AM
12  3/27/2020 11:45:00 AM

例如,如果当前时间是上午 11:00,那么它应该给出当前时间的结果。

我试过 trunc(sysdate) 但它不起作用

注意:

条件必须具有从现在到一天结束的日期和时间格式。

【问题讨论】:

  • 从不,永远不要对已经是日期的值调用 to_date()。这将首先将date 值转换为varchar,然后将varchar 转换回最初的date

标签: sql oracle date datetime plsql


【解决方案1】:

必须有从现在到一天结束的日期和时间以及格式。

你可以这样做:

where t.visit_date >= sysdate and t.visit_date < trunc(sysdate) + 1

理由:

  • sysdate 为您提供当前日期/时间,它代表间隔的下限

  • trunc(sysdate) 是当天(今天午夜)的开始,您可以在其中添加1 以获得第二天的开始;这是范围的(不包括)上限

请注意,将to_date() 应用于函数sysdate 是没有意义的,它会产生一个日期。

【讨论】:

  • 这很完美。我一直在寻找这个几乎超过 3 小时不知道它也是这样工作的。谢谢。
猜你喜欢
  • 2021-04-20
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 2016-11-13
  • 2015-01-27
  • 2014-01-26
  • 1970-01-01
  • 2014-03-20
相关资源
最近更新 更多