SQL查找字符串中的第一个非数字字符

Bra*_*rad 7 t-sql sql-server string parsing

我以[nonnumericprefix] [number]格式继承了一个带有标识符的表.例如(ABC123; R2D2456778;等).我想知道是否有一种很好的方法可以将SQL拆分为两个字段,例如右侧形成的最大整数,以及前缀,例如(ABC,123; R2D,2456778等).我知道我可以使用游标,C#代码等来实现这一点 - 如果必须的话,我会这样做 - 但我不会经常遇到我在SQL中不能快速轻松地做的事情,所以我想我会发布它这里.

Cad*_*oux 15

您可以使用PATINDEX类似的模式'%[^0123456789]%''%[^0-9]%'查找第一个非数字字符的位置


Cor*_*ory 15

  1. 反转字符串
  2. 使用PATINDEX查找非数字字段的第一个匹配项
  3. 使用LEFT函数返回字符串的数字部分

代码示例

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) )
Run Code Online (Sandbox Code Playgroud)

  • 如果没有其他任何东西,这将失败,尝试R2D245.6778 (3认同)

Adr*_*der 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
Run Code Online (Sandbox Code Playgroud)