我正在尝试扩展我的(Oracle)SQL技能,我最近遇到了这种情况,我认为这将是一个很好的例子。我可以使用Python轻松处理这个问题,但我想尝试一下SQL。
我有一个应用程序,需要根据当前月份查询不同的产品。我在编写正确的sql以获取冬季产品时遇到问题,因为月份范围越过新的一年,而且大于等于的基本dg.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithAutoHeaderText;
dg.SelectAll();
Clipboard.SetDataObject(dg.GetClipboardContent());
File.WriteAllText(@"path.txt", Clipboard.GetText(TextDataFormat.Text));
语句将是不够的。
Product Start_Month End_Month ------ ----------- --------- Shorts 5 9 Jackets 10 4
我一直在修补一些CASE WHEN陈述,但我没有任何值得展示的东西。下面的SQL在夏季工作正常,但冬天失败了。它显然需要一些条件语句,我没有找到任何好的高级SQL教程和示例。有关如何改进以下SQL以返回正确行的任何建议?
WHERE
答案 0 :(得分:2)
您需要使用双重条件,因为范围不同
WHERE
( Start_Month < End_Month
AND Start_Month <= extract(month from sysdate) AND End_Month >= extract(month from sysdate)
)
OR
( Start_Month > End_Month
AND (Start_Month <= extract(month from sysdate) OR End_Month >= extract(month from sysdate) )
)
答案 1 :(得分:0)
假设您的月份范围超过一年,您可以尝试以下代码:
SELECT Product
FROM SEASONAL_PRODUCTS
WHERE sysdate BETWEEN to_date(start_month || '-' || extract(YEAR FROM sysdate), 'MM-YY')
AND
CASE
WHEN END_MONTH - START_MONTH <= 0
THEN to_date(end_month || '-' || (extract(YEAR FROM sysdate) + 1), 'MM-YY')
ELSE to_date(end_month || '-' || (extract(YEAR FROM sysdate)), 'MM-YY')
END;
这有点乱,但它是Juan Carlos Oropeza的另一个解决方案。