给出这样的(样本)表:
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列来获取值的范围?
答案 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格式。这种排序正确,允许您使用不等式比较。