SQL для нахождения первого нечислового символа в строке

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

7
задан Brad 21 January 2010 в 15:47
поделиться

3 ответа

  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) )
15
ответ дан 6 December 2019 в 05:08
поделиться

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

15
ответ дан 6 December 2019 в 05:08
поделиться

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

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
8
ответ дан 6 December 2019 в 05:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: