根据其他列选择范围

时间:2016-09-22 18:29:55

标签: sql netezza

给出这样的(样本)表:

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列来获取值的范围?

2 个答案:

答案 0 :(得分:2)

戈登的替代方案,这可能会取决于您的RDBMS

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

答案 1 :(得分:0)

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

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

请注意,将句点转换为日期的特定功能因数据库而异,而该问题尚未指定(尚?)。但这会让你知道如何做到这一点。

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