【问题标题】:oracle: query timestamp with variable datesoracle:查询具有可变日期的时间戳
【发布时间】:2016-05-09 01:22:43
【问题描述】:

在我的所有脚本中,我想查询 Oracle 以向我提供时间戳小于今天(今天上午 12 点)且大于最后一天(上午 12 点)的行 我已经想出了以下脚本:

WHERE DAILY_OPEN_POSITIONS.OPEN_TIMESTAMP <= (SELECT SYSTIMESTAMP FROM DUAL) 
AND DAILY_OPEN_POSITIONS.OPEN_TIMESTAMP >= (SELECT SYSTIMESTAMP - INTERVAL '2' DAY FROM dual) 

但这并不是我想要的,因为它给出的行不是从上午 12 点开始,而是从当前时间开始。

我正在寻找一种将可变日期(每天的日期)和固定时间(上午 12 点)混合在一起的方法,因此我的查询将仅限于:

WHERE DAILY_OPEN_POSITIONS.OPEN_TIMESTAMP <= (today's date started at 12 am) 
AND DAILY_OPEN_POSITIONS.OPEN_TIMESTAMP >= (yesterday's date started at 12 am 

【问题讨论】:

标签: database oracle date-arithmetic


【解决方案1】:

您不需要子查询来访问函数。我想你只想trunc()

WHERE DAILY_OPEN_POSITIONS.OPEN_TIMESTAMP <= trunc(SYSTIMESTAMP) AND 
      DAILY_OPEN_POSITIONS.OPEN_TIMESTAMP >= trunc(SYSTIMESTAMP - INTERVAL '2' DAY) 

但是,我认为在第二种情况下应该是“1”天。

【讨论】:

  • 是的,应该是一天。但是,如果脚本在 00:01 运行,那么间隔 -1 将不会指向最后一天。这是主要问题,我可以明确地说在这个日期从 00 开始执行查询,而上一个日期从 00 开始执行查询
  • 但这给出了从昨天凌晨 12:01 到当前时间的结果。我希望它是从昨天的 12:00 到今天的 12:00。
  • @user1596226 。 . .不,trunc() 删除了时间组件。
猜你喜欢
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
相关资源
最近更新 更多