当满足类似条件时,是否有更好的方法为变量赋值?
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 数字,那将是错误的,但它与您在案例解决方案中遇到的错误相同
所以我将得到 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 数字,那将是错误的,但它与您在案例解决方案中遇到的错误相同