Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-选择当前月份在某个范围内的位置_Sql_Oracle - Fatal编程技术网

SQL-选择当前月份在某个范围内的位置

SQL-选择当前月份在某个范围内的位置,sql,oracle,Sql,Oracle,我正在尝试扩展我的Oracle SQL技能,最近我遇到了这种情况,我认为这将是一个值得学习的好例子。我可以用Python轻松地处理这个问题,但我想用SQL试试 我有一个应用程序,需要根据当月查询不同的产品。我在编写正确的sql以获取冬季产品时遇到了问题,因为月份范围跨越了新的一年,而带有大于和小于then的基本WHERE语句是不够的 Product Start_Month End_Month ------ ----------- --------- Shorts

我正在尝试扩展我的Oracle SQL技能,最近我遇到了这种情况,我认为这将是一个值得学习的好例子。我可以用Python轻松地处理这个问题,但我想用SQL试试

我有一个应用程序,需要根据当月查询不同的产品。我在编写正确的sql以获取冬季产品时遇到了问题,因为月份范围跨越了新的一年,而带有大于和小于then的基本WHERE语句是不够的

Product Start_Month End_Month ------ ----------- --------- Shorts 5 9 Jackets 10 4 我一直在修改一些案例,但我没有任何值得展示的东西。下面的SQL在夏季运行良好,但在冬季运行失败。它显然需要一些条件语句,我还没有找到任何好的高级SQL教程和示例。关于如何改进以下SQL以返回正确的行,有什么建议吗

SELECT Product FROM SEASONAL_PRODUCTS 
WHERE Start_Month <= extract(month from sysdate) 
AND End_Month > extract(month from sysdate);

您需要使用双重条件,因为范围不同

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)  )
)

假设您没有超过一年的月份范围,您可以尝试以下代码:

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;

这有点混乱,但这是胡安·卡洛斯·奥罗佩扎回答的另一个解决方案

在夹克衫的数据中,起始月大于结束月,因此,如果这是有效数据,则需要在查询中处理。我想我有。当Need>或>=在2月份仍然存在问题时,需要再次检查。但是我认为我们可以通过添加另一组where条件来测试它是在年初还是年底。我只是更新代码。。你们需要的第一个案例,开始,结束,第二个案例,或者每个案例。假设今天是2月14日,这个月是4号。那么对于短裤来说,开始5=4在或部分如此正确,我刚刚意识到一个错误,我的意思是4月14日->月=4请给我一点时间来理解你的答案。我认为如果你使用更好的缩进,开始月份>=结束月份会更容易阅读