【问题标题】:SQL - Select records between Start Century/Year/Week & End Century/Year/WeekSQL - 在 Start Century/Year/Week 和 End Century/Year/Week 之间选择记录
【发布时间】:2014-03-14 14:43:56
【问题描述】:

我有一个文件,其中包含 CENT、YEAR 和 WEEK 列(所有整数字段)

YEAR 是 2 位数的年份。 CENT 是一个世纪指标,0 表示 = 2000 年。WEEK 是 2 位数的周,即 1 - 52

我正在尝试在以下之间选择记录:

  • 起价:1
  • 从年份:13
  • 从第 45 周开始
  • 到美分:1
  • 至年份:14
  • 至周:12

所以从 2013 年第 45 周到 2014 年第 12 周(含)。

为了举例,假设文件包含从第 13 年第 1 周到第 14 年第 52 周每周的 1 条记录,因此:

  • 美分 = 1,年 = 13,周 = 1
  • 美分 = 1,年 = 13,周 = 2
  • 美分 = 1,年 = 13,周 = 3
  • ...
  • ...
  • ...
  • 美分 = 1,年 = 13,周 = 52
  • 美分 = 1,年 = 14,周 = 1
  • ...
  • ...
  • ...
  • 美分 = 1,年 = 14,周 = 52

但是,该文件中也可能有 1999 年的记录,内容如下:

  • 美分 = 0,年 = 99,周 = 1
  • 美分 = 0,年 = 99,周 = 2
  • 美分 = 0,年 = 99,周 = 3
  • ...
  • ...
  • ...
  • 美分 = 0,年 = 99,周 = 52

我确实知道如何实现这一点,但 SQL 很长(而且可能效率不高),有人知道速记方法吗?

我们有世纪指标的原因是遗留的 iSeries 文件:)

我只需要一个

SELECT * FROM FILENAME WHERE (*** CENT, YEAR & WEEK are between the two sets of Cent/Year/Week ***)

谢谢

【问题讨论】:

  • 你能提供更详细的信息吗?架构?
  • 我想知道我还能提供什么其他信息 - 我只是在做一个 Select * 其中 CENT、YEAR、WEEK 介于 From 和 To cent/year/weeks 之间

标签: sql


【解决方案1】:

您可以使用这种结构(下限类似)。它看起来很丑陋,但它可以让事情变得可悲。

CENT > @centFrom
OR CENT = @centFrom AND YEAR > @yearFrom 
OR CENT = @centFrom AND YEAR = @YearFrom AND WEEK >= @weekFrom

【讨论】:

  • "CENT >= @centFrom" 使任何年/周匹配 CENT=@centFrom
  • 第一个条件应该是'>',而不是'>='。否则即使year
  • 这将挑选出 CENT = 1 的所有记录,在我的情况下,它所有记录在文件中。 from CENT 可能是 0(2000 年之前)。此外,第一个 OR 子句将挑选出第 13 年的所有记录。
  • 到达那里,它现在可以正确选择 13 年的记录,但也会选择 13 年之后的所有内容 :)
  • 您的第一个 OR 子句:OR CENT = centFrom AND YEAR > yearFrom 会在第 13 年之后挑选出所有内容,我只需要到第 14 年的第 12 周,所以我不确定你的意思.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 2015-07-31
  • 2021-11-20
  • 1970-01-01
  • 2021-11-04
  • 2022-07-12
相关资源
最近更新 更多