SQL взять только числовые значения c из столбца - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть следующие данные в столбце:

aud_344266_jayde_adams
int_343581_jtou_s5_ep1
of_344289_geordie_s21_rig_c
soft_343726_24hrpc_s4_norbiton
on_334195_sas_s5_1007_1008

, и я хочу только вернуть следующее:

344266
343581
344289
343726
334195

Как вы можете сказать, в числе есть шаблон Я хочу вернуться. Они должны подчеркивать до и после них, а также иметь длину 6 символов.

Есть ли способ сделать это в SQL Сервер?

Ответы [ 4 ]

3 голосов
/ 08 февраля 2020

Для данных вашего примера это работает:

select left(stuff(t.col, 1, patindex('%[_][0-9][0-9][0-9][0-9][0-9][0-9][_]%', t.col), ''), 6)

Или еще проще:

select substring(t.col, patindex('%[_][0-9][0-9][0-9][0-9][0-9][0-9][_]%', t.col) + 1, 6)

Здесь - это скрипта db <>.

1 голос
/ 08 февраля 2020

Вы можете использовать SUBSTRING в сочетании с CHARINDEX для достижения этого

select substring(value, CHARINDEX('_', value) + 1, 6)
from TempTable

Демонстрация на db <> fiddle

Выход

344266
343581
344289
343726
334195
1 голос
/ 08 февраля 2020

APPLY ваш друг.

-- Sample Data
DECLARE @yourtable TABLE (SomeString VARCHAR(100));
INSERT @yourtable (SomeString) VALUES 
  ('aud_344266_jayde_adams'),('int_343581_jtou_s5_ep1'),('of_344289_geordie_s21_rig_c'),
    ('soft_343726_24hrpc_s4_norbiton'),('on_334195_sas_s5_1007_1008');

-- Solution
SELECT      TheNumber = SUBSTRING(t.SomeString,d1.Pos,d2.Pos-d1.Pos)
FROM        @yourtable AS t
CROSS APPLY (VALUES(CHARINDEX('_',t.SomeString)+1))      AS d1(Pos)
CROSS APPLY (VALUES(CHARINDEX('_',t.SomeString,d1.Pos))) AS d2(Pos);

Возвращает:

TheNumber
----------
344266
343581
344289
343726
334195
1 голос
/ 08 февраля 2020

Вы можете использовать функции left, right и charindex

пример:

declare @row as varchar(100) = 'aud_344266_jayde_adams'

select @row,  right(@row, len(@row)-charindex('_',@row)), left(right(@row, len(@row)-charindex('_',@row)),-1 + charindex('_',right(@row, len(@row)-charindex('_',@row))))

Для своей таблицы вы делаете:

select left(right(_Column, len(_Column)-charindex('_',_Column)),-1 + charindex('_',right(_Column, len(_Column)-charindex('_',_Column))))
From Tbl
...