首页 > 解决方案 > sysdate 格式在 where 子句中不起作用

问题描述

我正在尝试在 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) 但它不起作用

笔记:

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

标签: sqloracledatedatetimeplsql

解决方案


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

你可以这样做:

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

理由:

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

  • trunc(sysdate)是当天的开始时间(今天午夜),您可以将其添加1到第二天的开始时间;这是范围的(独占)上限

to_date()请注意,应用到f​​unction是没有意义的sysdate,它会产生一个日期。


推荐阅读