我有一个列存储特定ID号的摘要。该摘要列中的值如下所示。
“我已支付了$ 100.5美元的RX $ 100 Ovp,期末余额为550.30”
我想将所有金额$ 100,$ 80.54,550.30分开并将它们添加到SQL Server中的一个值730.84。有时只有一个时间有一个超过3个金额,所以我想将它们全部加到一个值。
任何人都可以帮我解决这个问题吗?
提前谢谢。
答案 0 :(得分:1)
您可以这样尝试:
简短说明:首先我带走$
标志。然后,通过用XML end-start标签替换所有空格,将您的字符串分成几部分。前面有一个开始标记,最后有一个结束标记,我们可以将它转换为XML并使用.nodes()
- 方法将部分作为派生表获取。
注意:如果您的字符串可能包含禁用字符(&lt;,&gt;或&amp;),则必须将其替换为<
,>
和&
。
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