【问题标题】:I want to query result with specific year ranges我想查询特定年份范围的结果
【发布时间】:2021-11-25 08:36:09
【问题描述】:

我想查询具有特定年份范围的结果。例如 5 到 10 年的结果。

select * from Employee
where dateHired >= 5 and dateHired <= 10

【问题讨论】:

  • 您当前的查询有什么问题?
  • 这是正确的做法吗?因为它无法执行。
  • dateHired >= sysdate – 间隔“5”年和 dateHired
  • 因为我在表格中的数据是日期格式

标签: sql oracle date


【解决方案1】:

有很多方法可以做到这一点,但最简单的一种是:

SELECT *
FROM employees e
WHERE MONTHS_BETWEEN(e.dateHired, SYSDATE) BETWEEN 60 AND 120;

【讨论】:

  • 如果显示的数据必须始终在 5 - 10 年的范围内怎么办?
  • 请问60和120分别代表什么?
  • @JoshuaTabi 一年有 12 个月。 5(年)* 12(月)= 60。10(年)* 12(月)= 120
【解决方案2】:

查找日期,例如在 2005 年到 2010 年之间,您可以使用:

SELECT *
FROM Employee
WHERE dateHired >= date '2005-01-01' AND dateHired < date '2011-01-01';

【讨论】:

  • 如果日期在 dd-mm-yyyy 中,我应该这样做 WHERE dateHired >= date 01-01-2005' AND dateHired
  • 您是否将日期存储为文本?如果是这样,那就停止这样做。
  • 不要混淆文本和日期文字。日期文字具有固定的 ANSI 格式 YYYY-MM-DD,它不依赖于 NLS 设置。
【解决方案3】:

我喜欢 Del 的解决方案,但它不会使用 dateHired 列的索引(如果存在)。我建议了一种解决方案的变体,它将执行 INDEX RANGE SCAN。

SELECT *
FROM employees e
WHERE e.dateHired BETWEEN add_months(SYSDATE, -12 * 10) and add_months(SYSDATE, -12 * 5) ;

【讨论】:

  • 这将在2024-02-29 上失败。不要减去INTERVAL '1' YEAR,使用ADD_MONTHS
  • 感谢您提供非常重要的说明。我纠正了错误。
猜你喜欢
  • 2017-11-05
  • 2014-12-28
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2018-07-09
  • 2019-06-05
相关资源
最近更新 更多