SQL для поиска первого нечислового символа в строке - PullRequest
5 голосов
/ 21 января 2010

Я унаследовал таблицу с идентификаторами в формате [nonnumericprefix] [number]. Например (ABC123; R2D2456778; и т. Д.). Мне было интересно, есть ли хороший способ разбить это в SQL на два поля, например, наибольшее целое число, образованное справа, и префикс (ABC, 123; R2D, 2456778; и т. Д.). Я знаю, что могу сделать это с помощью курсора, кода на C # и т.д. здесь.

Ответы [ 3 ]

14 голосов
/ 21 января 2010

Вы можете использовать PATINDEX с шаблоном, например '%[^0123456789]%' или '%[^0-9]%', чтобы найти позицию первого нечислового символа

13 голосов
/ 21 января 2010
  1. Перевернуть строку
  2. Используйте PATINDEX, чтобы найти первое вхождение не числового поля
  3. Используйте функцию ВЛЕВО, чтобы вернуть числовую часть строки

Пример кода

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) )
7 голосов
/ 21 января 2010

Вы можете попробовать что-то вроде

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
...