当满足类似条件时,是否有更好的方法为变量赋值?

Is there are better way to assign a variable a value when the like condition is met?

所以我将得到 table 值,其中一列中的某些值将具有 4 位数的值,如果它们存在,我必须将第 3 个值添加到变量中。所以如果我有 1234,变量 Number 将为 3。下面是我想出的。它完成了工作,但我不喜欢这个解决方案。有更好的方法吗?

SET @Number = CASE
                      WHEN @Name LIKE '%[0-9][0-9]0[0-9]%' THEN '0'
                      WHEN @Name LIKE '%[0-9][0-9]1[0-9]%' THEN '1'
                      WHEN @Name LIKE '%[0-9][0-9]2[0-9]%' THEN '2'
                      WHEN @Name LIKE '%[0-9][0-9]3[0-9]%' THEN '3'
                      WHEN @Name LIKE '%[0-9][0-9]4[0-9]%' THEN '4'
                      WHEN @Name LIKE '%[0-9][0-9]5[0-9]%' THEN '5'
                      WHEN @Name LIKE '%[0-9][0-9]6[0-9]%' THEN '6'
                      WHEN @Name LIKE '%[0-9][0-9]7[0-9]%' THEN '7'
                      WHEN @Name LIKE '%[0-9][0-9]8[0-9]%' THEN '8'
                      WHEN @Name LIKE '%[0-9][0-9]9[0-9]%' THEN '9'
                      ELSE '<#>'
                  END
SET @Number = SUBSTRING ( @Name,3 , 1 )  

应该为您解决!

编辑:

由于 4 位数字可以在字符串中的任何位置,请尝试:

SELECT IIF(PATINDEX('%[0-9][0-9][0-9][0-9]%', @name) <> 0
       , SUBSTRING(@name, PATINDEX('%[0-9][0-9][0-9][0-9]%', @name) + 2, 1)
       , '#')

patindex 告诉您模式从哪里开始,因此我们可以使用它来定位字符串,iif 让您处理 #.

如果您在 4 位数字之前有一个 5 数字,那将是错误的,但它与您在案例解决方案中遇到的错误相同