您可以通過幾種方法來解決這個問題。要得到什麼,我相信OP正在尋找解決方案,你可以做點小約翰·卡佩萊蒂的解決方案,以便它看起來像這樣:
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]%';
需要注意的是最快的字符串的「分流」據我所知,2012年SQL +可以找到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)+'"';
你試過了嗎?正則表達式?如果不是,請仔細查看以便接近解決方案。 – Robyn
SQL SERVER 2012是您在標籤中提供的信息。你的問題標題沒有意義。請[編輯]使其描述您提問的問題或您遇到的問題。你還沒有提供任何這些信息。請訪問[問],然後[編輯]以滿足這些要求。 –
我已經使用Reg表達式來獲取值,但是,我希望所有這些值在一個列中。 – user2771727