繁体   English   中英

如何优化Oracle SQL中的日期转换

[英]How to optimize date transformation in Oracle SQL

我在数据库中的 NUMBER(10) (20210821) 数据类型中有一个日期列CUR_DATE ,当我开始执行一些转换时,我遇到了一个非常棘手的操作时间问题。

例如。 我需要从当天开始获取最近 2 个月的数据,因此我在 WHERE 子句中使用了这样的转换:

and trunc(to_date(CUR_DATE,'yyyymmdd'),'mm') >= add_months(trunc(sysdate,'mm'),-1)

如果我不更改日期类型当然它运行得更快

and CUR_DATE >= 20220201

那么也许会有允许我执行最近两个月数据的解决方案?

反其道而行之:

and cur_date >= to_number(to_char(add_months(trunc(sysdate, 'mm'), -1), 'yyyymmdd'))

如果你必须。 为什么? 因为 - 我想 - 在cur_date列上有一个索引。 当你弄乱它(应用各种功能)时,索引不再被使用。 不过,您可以创建一个基于函数的索引。

SQL> select to_number(to_char(add_months(trunc(sysdate, 'mm'), -1), 'yyyymmdd')) val from dual;

       VAL
----------
  20220201

SQL>

您真正应该做的是将日期存储到DATE中,而不是NUMBER数据类型列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM