Получить числовое значение между указанными символами - PullRequest
4 голосов
/ 04 апреля 2019

У меня есть столбец, имеющий значение типа 'aAb314282069480098c1234d # 20e000'.
Я хотел бы получить только «314282069480098» из этого. Как мне этого добиться.

Я пытался так:

SUBSTRING(Mercury_AcqRefData,PATINDEX('%[0-9]%',Mercury_AcqRefData),LEN(Mercury_AcqRefData))

но я не достиг. Заранее спасибо за помощь.

Ответы [ 3 ]

4 голосов
/ 04 апреля 2019

Попробуйте ниже, это дает требуемые результаты:

DECLARE @string varchar(200) = 'aAb314282069480098c1234d#20e000'
select left(s, patindex('%[^0-9]%', s) - 1)
FROM (SELECT SUBSTRING(@string, patindex('%[0-9]%', @string), len(@string)) 
as S
 ) XX;
3 голосов
/ 04 апреля 2019

Можете ли вы попробовать следующий запрос:

DECLARE @Mercury_AcqRefData AS VARCHAR(200) = 'aAb31428206948220098c1234d#20e000';

DECLARE @Filter1 AS VARCHAR (200) = '';
SELECT @Filter1 = SUBSTRING(@Mercury_AcqRefData, PATINDEX('%[0-9]%', @Mercury_AcqRefData), LEN(@Mercury_AcqRefData));
SELECT SUBSTRING(@Filter1, 0, PATINDEX('%[A-Za-z]%', @Filter1));
2 голосов
/ 04 апреля 2019

Основываясь на ответе @ Усмана Мирзы, я создал следующий «однострочный», который использует ваше оригинальное имя поля:

LEFT(SUBSTRING([Mercury_AcqRefData],
               PATINDEX('%[0-9]%', [Mercury_AcqRefData]),
               LEN([Mercury_AcqRefData])),
     PATINDEX('%[^0-9]%', SUBSTRING([Mercury_AcqRefData],
                                    PATINDEX('%[0-9]%', [Mercury_AcqRefData]),
                                    LEN([Mercury_AcqRefData]))) - 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...