2012-02-07 55 views
0

可能重复:
Extracting dollar amounts from existing sql data?MSSQL2008字符串中提取

我在MSSQL2008数据库中的列包含行值,如本:

$10/1Mango 

$12/2Mango + $11.95/Great Casino 

$11 Business Banana 

$80/XXXX + $12.34/Soft XXX 24m 

2*xpr Love $169.69 

Good $5 Love 

Longine $99/99Mango 

我如何提取$值,例如$ 10,如果有多个$值相同,则将其添加到自身线,例如$ 12/2Mango + $ 11.95 /大赌场等于23.95美元。请注意,+分隔美元值的新条目可能有超过2个$值的实例,在这种情况下,如何自动使它循环生成总价值并返回为货币值?

+0

? – 2012-02-07 08:52:03

+0

哈哈!好吧,我必须先编辑文本,然后再将它们粘贴到此处,以便我不会将太多的信息提供给我的工作。所以我想我会用一些有趣的文本 – 2012-02-07 11:42:23

+0

我更多的意思是存储各种非结构化数据,包括在一个列中有特殊规则('+'规则),而不是结构化数据(你知道,SQL数据库是意味着存储) – 2012-02-07 11:48:39

回答

2

使用此function提取的金额,这function为什么你在你的数据库,可怕的数据分割字符串

declare @tbl as table(id int, texts nvarchar(max)) 

    insert into @tbl values 
     (1, 
     '$10/1Mango 
     $12/2Mango + $11.95/Great Casino 
     $11 Business Banana 
     $80/XXXX + $12.34/Soft XXX 24m 
     2*xpr Love $169.69 
     Good $5 Love 
     Longine $99/99Mango'), 
     (2, 
    '$20/1Mango 
     $32/2Mango + $11.95/Great Casino 
     $1 Business Banana 
     $480/XXXX + $12.34/Soft XXX 24m 
     2*xpr Love $1629.69 
     Good $5 Love 
     Longine $99/99Mango') 

    SELECT t.id, sum(a.Amount) 
    from @tbl t 
    cross apply dbo.fn_ParseText2Table(t.texts,'+')as f 
    cross apply dbo.fnGetAmounts(f.txt_value) as a 
    group by t.id, f.Position 
    order by t.id 
    OPTION(MAXRECURSION 32767) ;