[英]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.