2013-07-18 35 views
0

我需要一個查詢來分別在大括號之間拆分值。如何使用SQL查詢拆分大括號中的值

我VARCHAR值是

16(8),14(10) 

我需要拆分爲

16,14 

我只需要和值而不是值這是(8) (10)括號內

我試過這個查詢

select 
    case 
    when charindex('(0-9)', OtherProduct) > 0 
    then rtrim(left(OtherProduct, charindex('(0-9)', OtherProduct)-1)) 
    else OtherProduct end as OtherProduct 
from dbo.rxnreactions where rsd='P=15(61),16(8),14(10)R=1,7S=9012' 

是任何人都可以幫助我分裂它。

+0

商店他們在他們自己的專欄中,而且你不會有這個問題;) –

+0

你可以使用SQL CLR函數來使用正則表達式嗎? http://msdn.microsoft.com/en-us/magazine/cc163473.aspx – Squid

回答

0

使用的功能由逗號分割,然後通過支架分裂,並在最後加入到單個串

SELECT SplitByBrackets.val 
FROM dbo.StringSplit(N'16(8),14(10)',N',') SplitByComma 
CROSS APPLY StringSplit(SplitByComma.val,N'(') SplitByBrackets 
WHERE SplitByBrackets.id % 2 = 1 

的StringSplit的樣品是

CREATE FUNCTION [dbo].[StringSplit] 
(
    @delimited nvarchar(max), 
    @delimiter nvarchar(100) 
) RETURNS @t TABLE 
(
-- Id column can be commented out, not required for sql splitting string 
    id int identity(1,1), -- I use this column for numbering splitted parts 
    val nvarchar(max) 
) 
AS 
BEGIN 
    declare @xml xml 
    set @xml = N'<root><r>' + replace(@delimited,@delimiter,'</r><r>') + '</r></root>' 

    insert into @t(val) 
    select 
    r.value('.','varchar(max)') as item 
    from @xml.nodes('//root/r') as records(r) 

    RETURN 
END 

fiddle it