【问题标题】:Oracle pass today's value to a variable and use itOracle 将今天的值传递给一个变量并使用它
【发布时间】:2021-10-30 14:04:09
【问题描述】:

我想将今天用作变量并在这样的查询中使用它:

  select record_date, 
         another_column
    from table
   where record_date = v_today
order by record_date;

其中v_today 是所需的变量。我该怎么做?

【问题讨论】:

  • where record_date = :v_today?这里:(冒号)将:v_today标记为变量

标签: sql database oracle variables


【解决方案1】:

尚不清楚您的问题是在传递变量还是在如何比较日期。如果您总是想要“今天”,则无需使用已声明的变量。只需使用 SYSDATE。由于 DATE 和 TIMESTAMPS 始终包含时间组件,因此您需要使用 TRUNC 将其去掉:

select record_date,
       another_column
from my_table
where trunc(record_date) = trunc(sysdate)
;

如果您想要“昨天”,则从 sysdate 子跟踪 1(天):

select record_date,
           another_column
    from my_table
    where trunc(record_date) = trunc(sysdate - 1 )
    ;

【讨论】:

  • trunc(some_date) = trunc(sysdate) 如果写成some_date >= trunc(sysdate) and some_date < trunc(sysdate + 1) 会更好地利用分区和索引
【解决方案2】:

如果您想按今天的日期过滤行,您可以使用current_date,如下所示:

select record_date, another_column
from table
where record_date = trunc(current_date)
order by record_date;

【讨论】:

  • 这不允许 DATE 或 TIMESTAMP 类型中固有的时间组件。也没有迹象表明 OP 需要考虑当前时区,这是使用 CURRENT_DATE 与仅使用 SYSDATE 所固有的。
猜你喜欢
  • 2021-03-27
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多