我继承了一个带有[nonnumericprefix] [number]格式标识符的表。例如(ABC123; R2D2456778;等)。我想知道是否有一种很好的方法可以将SQL拆分为两个字段,例如右侧形成的最大整数,以及前缀,例如(ABC,123; R2D,2456778等)。我知道我可以使用游标,C#代码等来实现这一点 - 如果必须的话,我会这样做 - 但我不会经常遇到我在SQL中不能快速轻松地做的事情,所以我想我会发布它这里。
答案 0 :(得分:14)
您可以PATINDEX
使用'%[^0123456789]%'
或'%[^0-9]%'
等模式查找第一个非数字字符的位置
答案 1 :(得分:13)
代码示例
DECLARE @myString varchar(100);
DECLARE @largestInt int;
SET @myString = 'R2D2456778'
SET @mystring = REVERSE(@myString);
SET @largestInt = LEFT(@myString, PATINDEX('%[a-z]%', @myString) - 1)
PRINT ( CONVERT(varchar(100), @largestInt) )
答案 2 :(得分:7)
您可以尝试类似
的内容DECLARE @Table TABLE(
Val VARCHAR(50)
)
INSERT INTO @Table SELECT 'ABC123'
INSERT INTO @Table SELECT 'R2D2456778'
SELECT *,
LEFT(Val,LEN(Val) - (PATINDEX('%[^0-9]%',REVERSE(Val)) - 1)),
RIGHT(Val,(PATINDEX('%[^0-9]%',REVERSE(Val)) - 1))
FROM @Table