【问题标题】:fetch matching from and to date in oracle/sql在 oracle/sql 中获取匹配的日期和日期
【发布时间】:2014-01-31 09:51:13
【问题描述】:

我在数据库中有以下数据集,

name    city        from       to
john    ny   01.03.2005   09.06.2005
john    ln   10.06.2005   29.09.2005
john    ca   30.09.2005   20.09.2013
arun    va   20.09.2007   15.09.2008
arun    ny   16.09.2008   09.06.2009

当我搜索给定的输入作为 name: john and from as 10.05.2005 and to as 02.09.2005 应该返回前两条记录,如果我提供 04.06.2005 和 09.06.2005 那么它应该返回第一条记录。

我有这个查询(('input from date' <= 'db from date' and 'db from date' < 'input to date') or ('db from date' <= 'input from date' and 'input from date' < 'db to date')),但我搜索的数据集很大,这个查询一直在运行。我正在尝试寻找有效的查询。

希望有人可以在这里提供答案。感谢您的回答。

【问题讨论】:

  • 这对您没有帮助。 WHERE name = 'john' and (FROM_DATE >= TO_DATE('10.05.2005','DD.MM.YYYY') AND TO_DATE <= TO_DATE('02.09.2005','DD.MM.YYYY')) 名称索引,from_date 应该对你有利。 FROM_DATE 应始终小于 to_date。所以你不需要验证。
  • 不是跳过第一条记录吗?
  • 但我的要求是,如果给定的输入符合 from 和 to 那么它应该返回该记录。

标签: sql database oracle


【解决方案1】:

如果您在 [from] 和 [to] 列中具有唯一的日期值,则可以为这些列(升序)设置唯一的聚集(或非聚集)索引。如果没有帮助,请再次评论

【讨论】:

  • 想过有索引,但是这个表经常变异,无法设置索引。
  • 还有另一种轻松处理日期值的方法:只需将日期值转换为十进制数据类型。例如,将 31.01.2014 14:32:06 转换为 20140131 和 143206。然后粘贴 20140131 FROMDATE 还必须将过滤器转换为十进制类型。这是因为 SQL 查询在 Decimal 类型上的运行速度比 Date 类型快(抱歉我的英语不好)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 1970-01-01
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多