2012-02-07 100 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) ;