在SQL Server中使用Between的数据范围

时间:2014-12-09 08:46:03

标签: sql-server-2008

我正在尝试使用IN为类别选择不同范围的数据,但不太确定语法 例如:类别的编号为1,3,4,然后是20到30,然后是100到110

我使用语法

Case category = 
    When categoryId IN (1,3,4, [20-30],[100-110] Then 'Running'

但是我收到了语法错误。我该怎么做?

4 个答案:

答案 0 :(得分:1)

您可以使用

SELECT
       CASE
         WHEN EXISTS (SELECT *
                      FROM   (VALUES(1,1),
                                    (3,4),
                                    (20,30),
                                    (100,110)) Ranges(Low, High)
                      WHERE  categoryId BETWEEN Low AND High) THEN 'Running'
       END
FROM YourTable

答案 1 :(得分:0)

CASE 
   WHEN categoryId IN (1,3,4) OR 
        (categoryId >= 20 AND categoryId <= 30) OR 
        (categoryId >= 100 AND categoryId <= 110) 
   THEN 'Running' 
END

答案 2 :(得分:0)

你可以像往常一样编写一个简单的标量函数。

CREATE FUNCTION [dbo].[Categoory_Range] (@CategoryID as bigInt)  
RETURNS bit AS  
BEGIN 
Declare @result as bit = 0


    -- Need to tack a delimiter onto the end of the input string if one doesn't exist
    if(@CategoryID <= 4 and @CategoryID > 0)
       begin
         set @result =  1
       end
     else if(@CategoryID >20 and @CategoryID <= 30)
       begin
          set @result =1
     end
     else if(@CategoryID > 100 and @CategoryID <= 110)
        begin
         set @result = 1
         end
     else 
     begin
         set @result= 0
      end 

   return @result


END

您想要使用的时间和地点

Select
  Case WHEN [Categoory_Range](CategoryID) > 0 Then  'Running' ELSE 'Whatever' END FROM MyTable.

我喜欢使用这些功能,因为你不必一直重写这些功能。我通常用功能来做。检查上面的功能虽然没有测试。希望能帮助到你。但是,如果你只想写一次,你可以只想写一次,你可以在查询中做。

答案 3 :(得分:0)

你可以试试这个:

CASE
   WHEN CategoryId in (1,3,4) or
   (CategoryId between 20 and 30) or
   (CategoryId between 100 and 110) THEN 'Running'
END