如何检查值的最后4位是否在SQL Server中的范围内

如何检查值的最后4位是否在SQL Server中的范围内,sql,sql-server,case,Sql,Sql Server,Case,我有一个列,其中每个值是9个字符(col1)。我需要提取col1的最后4个字符,看看该值是否在0001-0879的范围内。这个字符串中可能有字母 初始表 col1 column2 585550529 red 589960MNO blue 849828415 green 预期结果 col1 column2 column3 585550529 red True 589960MNO blue False 849828415 green F

我有一个列,其中每个值是9个字符(col1)。我需要提取col1的最后4个字符,看看该值是否在0001-0879的范围内。这个字符串中可能有字母

初始表

col1       column2
585550529  red
589960MNO  blue
849828415  green
预期结果

col1       column2  column3
585550529  red      True
589960MNO  blue     False
849828415  green    False

SELECT col1, 
       col2, 
       CASE WHEN RIGHT(col1,4) IN('0001','0002','0003') THEN 'true' ELSE 'false' END
FROM table
是否可以在不必在IN语句中键入所有879个字符串的情况下执行此操作?这会变得很难看。

您可以在

...
CASE WHEN RIGHT(col1,4) between  '0001' and '0879' THEN 'true' ELSE 'false' END
...
那么:

SELECT col1, 
       col2, 
       CASE WHEN 
         isnumeric(RIGHT(col1,4)) and 
         cast(RIGHT(col1,4) as int) between 0 and 879
           THEN 'true' 
           ELSE 'false' 
       END
FROM table

使用PATINDEX试试这个

;WITH CTE(col1,column2)
AS
(
SELECT '585550529','red' UNION ALL
SELECT '589960MNO','blue' UNION ALL
SELECT '849828415','green'
)
SELECT col1,column2,CASE WHEN  newcol BETWEEN 1 AND  0879 THEN  'True'  ELSE 'False'  END AS column3
FROM
(
SELECT col1,
      column2,
      CAST(CASE WHEN PATINDEX('%[A-Z a-z]%',RIGHT(col1,4)) = 0 THEN RIGHT(col1,4)  ELSE ' '  END AS INT) newcol,
      CASE WHEN PATINDEX('%[A-Z a-z]%',RIGHT(col1,4)) = 0 THEN 'True'  ELSE 'False'  END  getcol

FROM CTE
) Dt 
结果

col1        column2 column3
----------------------------
585550529   red     True
589960MNO   blue    False
849828415   green   False

@马蒂布:是的