Я наследовал таблицу с идентификаторами в формате [nonnumericprefix] [число]. Например (ABC123; R2D2456778; и т.д.). Я задавался вопросом, был ли хороший способ разделить это в SQL в два поля, самое большое целое число, сформированное из правой стороны и префикса, например (ABC, 123; R2D, 2456778; и т.д.). Я знаю, что могу сделать это с курсором, кодом C#, и т.д. - и я буду, если я буду иметь к - но я не сталкиваюсь с вещами, которые я не могу сделать быстро и легко в SQL очень часто, таким образом, я думал, что отправлю его здесь.
Пример кода
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) )
Вы можете использовать Patindex
с рисунком, такой как % [^ 0123456789]% '
или % [^ 0-9] % '
, чтобы найти положение первого нечислового символа
Вы можете попробовать что-то вроде
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