2015-03-02 200 views
-1

有人可以建議一種方式,我可以從SQL Server表中的(&0459&/&0460&)*100這樣的字符串中提取04590460在SQL Server字符串中提取字符串之間的字符串

我應該能夠拉出兩個字符串夾在兩個字符之間。

在此先感謝。

+0

&&也是一個三明治字符串。你會如何避免這種情況? – 2015-03-02 13:25:24

+0

一旦你決定使用什麼規則,你可以使用PatIndex和SubString。 – 2015-03-02 15:21:41

回答

1

如果你一定總是有兩對&符號的,你可以提取兩個字符串這樣

declare @s varchar(max) = '(&0459&/&0460&)*100' 

declare @first int = charindex('&', @s) 
declare @second int = charindex('&', @s, @first+1) 
declare @third int = charindex('&', @s, @second+1) 
declare @fourth int = charindex('&', @s, @third+1) 

select substring(@s, @first+1, @[email protected]) 
select substring(@s, @third+1, @[email protected]) 
1

該解決方案將虎視眈眈「&」之間

;WITH CTE AS 
(
    SELECT t.c.value('.', 'VARCHAR(2000)') v, 
    rn = row_number() over (order by (select 1))-1 
    FROM (
     SELECT x = CAST('<t>' + 
       REPLACE('(&0459&/&0460&)*100', '&', '</t><t>') + '</t>' AS XML) 
    ) a 
    CROSS APPLY x.nodes('/t') t(c) 
) 
SELECT v FROM CTE 
WHERE rn in (1,3) 

結果第1和3TH值:

0459 
0460 
+0

嗨,感謝您的建議,我也在嘗試您的答案,但它有點複雜。 – VivekDev 2015-03-03 04:55:50