【发布时间】:2017-01-28 21:52:05
【问题描述】:
有没有办法在不使用 trunc 函数的情况下从日期字段中选择月份的第一天?这让我的查询速度太慢了。我在 where 子句中有这样的:
WHERE trunc(DATE_FIELD, 'MM') = :v_Month
查询在没有 trunc 函数的情况下运行 4 秒,但返回的数据集不完整。使用 trunc 函数将返回所有数据,但查询将需要 20 多分钟才能运行。
DATE_FIELD 一个月有很多天,但我只需要每月的第一天来记录每条记录。因此,如果 DATE_FIELD = 14/09/2016,我需要以某种方式获得 01/09/2016 但不使用 trunc。
这可能吗?
更新:
从代码中删除了 to_date()。这是一个错误,并没有在实际的完整查询中使用。
【问题讨论】:
-
提防asking about your attempted solution rather than your actual problem。或许您可以提供更多关于降低查询速度的详细信息,例如显示两个查询的解释计划。
-
请发布完整的查询并将
:v_Month替换为一个值。可能还有另一种优化方法... -
您在 DATE_FIELD 上使用
to_date()。仅当 DATE_FIELD 是字符串字段(varchar2 或类似字段)而不是日期字段时,这才有意义。如果是这样,您无能为力;您正在为将日期存储在错误的数据类型中而付出代价。如果实际上 DATE_FIELD 是日期数据类型,请使用提供的答案中的解决方案。