Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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 - Fatal编程技术网

用于在不同年份的两周之间搜索的SQL查询

用于在不同年份的两周之间搜索的SQL查询,sql,Sql,我有一列有周数,一列有年数。我想在数据库中搜索一段时间间隔,例如: 如果我想在今年的一周和明年的一周之间进行搜索,我应该使用什么查询 如果这一年是同一年,那将很容易,我的查询将如下所示: Select * From mytable Where (Finish_Week BETWEEN @Finish_Week1 AND @Finish_Week2) AND (Finish_Year = @Finish_Year) 这个解决方案适用于任何年份,它们不必像其他答案一样相隔一年。它将

我有一列有周数,一列有年数。我想在数据库中搜索一段时间间隔,例如:

如果我想在今年的一周和明年的一周之间进行搜索,我应该使用什么查询

如果这一年是同一年,那将很容易,我的查询将如下所示:

Select *
From mytable
Where (Finish_Week BETWEEN @Finish_Week1 AND @Finish_Week2) 
       AND (Finish_Year = @Finish_Year)

这个解决方案适用于任何年份,它们不必像其他答案一样相隔一年。它将年+周标准化为可直接比较的线性格式

SELECT * 
FROM mytable
WHERE Finish_Year*53+Finish_Week BETWEEN @Finish_Year1*53+@Finish_Week1 AND @Finish_Year2*53+@Finish_Week2
如果这太慢(因为表中有许多行),并且您有一个关于完成年份的索引,请添加以下内容:

AND Finish_Year BETWEEN @Finish_Year1 AND @Finish_Year2
简单回答:

SELECT * 
FROM   MYTABLE 
WHERE  ( FINISH_WEEK >= @Finish_Week1 
         AND FINISH_YEAR = @Finish_Year - 1 ) 
        OR ( FINISH_WEEK <= @Finish_Week2 
             AND FINISH_YEAR = @Finish_Year ) 
选择*
从MYTABLE
其中(完成工作周>=@完成工作周1
和FINISH_YEAR=@FINISH_YEAR-1)

或者(完成周我认为若你们有关于完成周、完成年的指数,最好的方法就是写

select *
from mytable
where 
   (
       Finish_Year = @Finish_Year and Finish_Week >= @Finish_Week1 or
       Finish_Year = @Finish_Year + 1 and Finish_Week <= @Finish_Week2
   )
选择*
从mytable
哪里
(
完成年=@完成年和完成周>=@完成周1或
完成年=@完成年+1和完成周