Вы можете подойти к этому несколько способов. Для того, чтобы получить то, что я считаю, что OP ищет решение, которое вы могли бы сделать небольшой твик для решения Джона Cappelletti, так что это выглядит следующим образом:
DECLARE
@string1 varchar(1000) =
'{cm_documentation_.chk_phone_call_physician}=1 &
{cm_documentation_.txt_phone_call_code}="99441" &
({cm_documentation_.txt_units_mins}!="" & ({local.units_mins}<5 |
{local.units_mins}>10) | {cm_documentation_.txt_units_mins}="")',
@string2 varchar(1000) =
'{@This}="93015" | {@This}="78454" | {@This}="78453" | {@This}="78452" |
{@This}="78451" | {@This}="78480" | {@This}="78478" | {@This}="78465" |
{@This}="78499" | {@This}="78492" | {@This}="78491" | {@This}="78459"';
Select RetVal
From [dbo].[udf-Str-Parse](@string1 + @string2,'"')
where RetVal NOT LIKE '%[^0-9]%';
Обратите внимание, что самый быстрая строка «разветвитель» Я знаю для SQL 2012 + можно найти here.
Другой вариант - использовать PatternSplitCM, который вы можете получить here. И сделать это:
DECLARE
@string1 varchar(1000) =
'{cm_documentation_.chk_phone_call_physician}=1 &
{cm_documentation_.txt_phone_call_code}="99441" &
({cm_documentation_.txt_units_mins}!="" & ({local.units_mins}<5 |
{local.units_mins}>10) | {cm_documentation_.txt_units_mins}="")',
@string2 varchar(1000) =
'{@This}="93015" | {@This}="78454" | {@This}="78453" | {@This}="78452" |
{@This}="78451" | {@This}="78480" | {@This}="78478" | {@This}="78465" |
{@This}="78499" | {@This}="78492" | {@This}="78491" | {@This}="78459"';
SELECT item = REPLACE(item,'"','')
FROM dbo.PatternSplitCM(@string1 + @string2,'[0-9"]')
WHERE matched = 1
AND item LIKE '"[0-9]%"';
Теперь, если вы вы всегда ищете этот шаблон ([0-9] = число): = "[0-9] [0-9] [0-9] [0-9] [0-9]»самый быстрый способ будет, как это использовать NGrams8K так:
DECLARE
@string1 varchar(1000) =
'{cm_documentation_.chk_phone_call_physician}=1 &
{cm_documentation_.txt_phone_call_code}="99441" &
({cm_documentation_.txt_units_mins}!="" & ({local.units_mins}<5 |
{local.units_mins}>10) | {cm_documentation_.txt_units_mins}="")',
@string2 varchar(1000) =
'{@This}="93015" | {@This}="78454" | {@This}="78453" | {@This}="78452" |
{@This}="78451" | {@This}="78480" | {@This}="78478" | {@This}="78465" |
{@This}="78499" | {@This}="78492" | {@This}="78491" | {@This}="78459"';
SELECT token = SUBSTRING(token,3,5)
FROM dbo.NGrams8K(@string1 + @string2,8)
WHERE token LIKE '="[0-9][0-9][0-9][0-9][0-9]"';
Кроме того, предположим, что вы знаете номера вы разборе из стали, скажем, от 3 до 5 символы длинные - вы можете сделать это с помощью NGrams8K следующим образом:
DECLARE
@string1 varchar(1000) =
'{cm_documentation_.chk_phone_call_physician}=1 &
{cm_documentation_.txt_phone_call_code}="99441" &
({cm_documentation_.txt_units_mins}!="" & ({local.units_mins}<5 |
{local.units_mins}>10) | {cm_documentation_.txt_units_mins}="")',
@string2 varchar(1000) =
'{@This}="9301" | {@This}="78454" | {@This}="78453" | {@This}="78452" |
{@This}="784514" | {@This}="78480" | {@This}="78478" | {@This}="78465" |
{@This}="78499" | {@This}="78492" | {@This}="78491" | {@This}="78459"';
SELECT token = SUBSTRING(token, 3, stringlen)
FROM (VALUES (4),(5),(6)) s(stringlen)
CROSS APPLY dbo.NGrams8K(@[email protected], stringlen+3)
WHERE token LIKE '="'+REPLICATE('[0-9]',stringlen)+'"';
Вы пробовали usi регулярное выражение? Если нет, посмотрите, чтобы приблизиться к решению. – Robyn
SQL SERVER 2012 - это информация, которую вы указали в тегах. Заголовок вопроса не имеет значения. Пожалуйста, отредактируйте, чтобы описать вопрос, который вы задаете, или проблему, с которой вы столкнулись. Вы не указали ни одной информации об этом. Пожалуйста, посетите [ask], а затем [edit], чтобы выполнить эти требования. –
Я использовал выражения Reg, чтобы получить значения, но я хочу, чтобы все эти значения были в одном столбце. – user2771727