如何检查值的最后4位是否在SQL Server中的范围内
我有一个列,其中每个值是9个字符(col1)。我需要提取col1的最后4个字符,看看该值是否在0001-0879的范围内。这个字符串中可能有字母 初始表如何检查值的最后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
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
@马蒂布:是的