Извлечение числовых значений из столбца (VARCHAR) на основе предварительного условия - PullRequest
1 голос
/ 13 июня 2019

В настоящее время я получаю доступ к табличному представлению с сервера SQL и пишу собственный запрос SQL для извлечения / фильтрации / создания настраиваемого столбца в соответствии с моими потребностями перед экспортом.Теперь в этом представлении один из столбцов имеет текстовое значение следующим образом

Description
Transaction 12345678-1
Tx234567890-2
45678901-12
55667788-20    
Inv# 12457800-2

Теперь все, что мне нужно, - это создать пользовательский столбец, который извлек бы все числовые значения и - из этой строки следующим образом.

Description
12345678-1
234567890-2
45678901-12
55667788-20
12457800-2

Если вы можете, пожалуйста, помощь будет принята с благодарностью.

Необработанные данные и желаемый результат - https://drive.google.com/file/d/1ze-S15kWi8qcLro8xx9vpSgnPIYCXLSa/view?usp=sharing

Заранее благодарю.

Ответы [ 2 ]

2 голосов
/ 13 июня 2019

Попробуйте это:

declare @t table (name varchar(50))

insert into @t values ('Tx234567890-2'),('Inv# 12457800-2')

select substring(name,PATINDEX('%[0-9]%',name),len(name)) from @t
0 голосов
/ 17 июня 2019

Шаблон, который я пытаюсь определить и извлечь из строки, выглядит следующим образом:

DDDDDDDD-D или DDDDDDDD-DD

D обозначает цифровую цифру

Таким образом,Следующее сработало для меня

SELECT description, 
CASE 
    WHEN PATINDEX('%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9]%', description)>0 THEN SUBSTRING(description, PATINDEX('%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9]%', description), 11)
    WHEN PATINDEX('%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9]%', description)>0 THEN SUBSTRING(description, PATINDEX('%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9]%', description), 10)
END AS refno, 

* ОТ XXXXX где (описание типа '% [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] - [0-9]% 'ИЛИ описание типа'% [0-9] [0-9] [0-9] [0-9] [0-9][0-9] [0-9] [0-9] - [0-9] [0-9]% ')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...