汇总在字符串中找到的不同金额,并在SQL中显示为一个金额

时间:2016-05-24 20:46:25

标签: sql-server tsql

我有一个列存储特定ID号的摘要。该摘要列中的值如下所示。

“我已支付了$ 100.5美元的RX $ 100 Ovp,期末余额为550.30”

我想将所有金额$ 100,$ 80.54,550.30分开并将它们添加到SQL Server中的一个值730.84。有时只有一个时间有一个超过3个金额,所以我想将它们全部加到一个值。

任何人都可以帮我解决这个问题吗?

提前谢谢。

更新:Shnugo回答下面的评论中提供了更多例子:

  1. FACETS索赔013346009100,创建了101.50美元的亏本,CIGNA PD已全部
  2. p $ 35.50-co20131008187565493 not ovp dd20140203992 gf not ovp。 pt lib比gf payment
  3. 更大
  4. 调整索赔后责令013319004600创建了48.30美元的减价(索赔事实313407523-00)

1 个答案:

答案 0 :(得分:1)

您可以这样尝试:

简短说明:首先我带走$标志。然后,通过用XML end-start标签替换所有空格,将您的字符串分成几部分。前面有一个开始标记,最后有一个结束标记,我们可以将它转换为XML并使用.nodes() - 方法将部分作为派生表获取。

注意:如果您的字符串可能包含禁用字符(<,>或&),则必须将其替换为<>&

DECLARE @string VARCHAR(MAX)='I have made a payment for RX $100 Ovp of $80.54 with a closing balance of 550.30';

WITH Splitted(number) AS
(
    SELECT CAST(part.value('.','varchar(max)') AS DECIMAL(14,4))
    FROM
    (
        SELECT CAST('<x>' + REPLACE(REPLACE(@string,'$',''),' ','</x><x>') + '</x>' AS XML)
    ) AS MyString(AsXml)
    CROSS APPLY AsXml.nodes('/x') AS A(part)
    WHERE ISNUMERIC(part.value('.','varchar(max)') )=1
)
SELECT SUM(number) 
FROM Splitted