Select 范围基于另一列

Select range based on another column

给定一个这样的(样本)table:

PERIOD ORD DATA...
Dec16   1
Sep16   3
Aug16   4
Jul16   5
Jun16   7
May16   8
Apr16   9
Mar16   11
Feb16   12
Jan16   13
Dec15   15
Nov15   16
Oct15   17
Sep15   19
Aug15   20
Jul15   21
Jun15   23
May15   24
Apr15   25
Mar15   27
Feb15   28
Jan15   29

其中 PERIOD 是一个字符串,我将如何查询给定时间段之间的所有行,例如在 PERIOD='Mar16' 和 'Jun15'(含)之间。有没有什么方法可以利用 SQL 查询中的 ORD 列来获取值的范围?

您可以将句点转换为日期并将其用于比较。例如,某些数据库支持 to_date(),它看起来像:

where to_date(period, 'MonYY') between to_date('Jun15', 'MonYY') and to_date('Mar16', 'MonYY') 

请注意,将您的经期转换为日期的具体功能因数据库而异,问题上尚未(尚未?)指定。但这让您知道如何去做。

而且,如果您要将句点存储为字符串,则应使用 YYYY-MM 格式。这样可以正确排序并允许您使用不等式比较。

替代 Gordon,这可能会起作用,具体取决于您的 RDBMS

SELECT *
FROM thetable
WHERE ORD BETWEEN (SELECT ORD FROM thetable WHERE PERIOD ='Mar16')
              AND (SELECT ORD FROM thetable WHERE PERIOD ='Jun15')