我在SO上找到了一些相关示例,但没有一个专门针对此案例的示例。开始:
我需要使用SQL解析从管道分隔的平面文件中获取的数据。字段之一的子格式如下。我的最终状态是对字段中的整数求和,但是这里的问题是查看使用SQL SELECT解析/提取整数的方法。子格式的模式将始终是所需的整数,在其前面将出现一个代字号(〜),然后是一个星号(*)。子字段的数量也可能有所不同(我的示例为5,但可能更多或更少)。4个字符的TAG名称并不重要。
因此,这是一个示例:
|GADS~55.0*BILK~0.0*BOBB~81.0*HETT~32.0*IGGR~51.0|
从这个例子中,我想要处理的是最终数字219。同样,我可以继续求和部分,这是下一步。只是对获得数字感兴趣。
我知道如何使用UNIX工具(即AWK,sed等)轻松解决此问题,但在SQL中却不行。任何建议都会有所帮助!谢谢!
这将返回219:
现在的代码
DECLARE @str VARCHAR(100) = '|GADS~55.0*BILK~0.0*BOBB~81.0*HETT~32.0*IGGR~51.0|';
WITH Cut1 AS
(
SELECT SUBSTRING(@str,CHARINDEX('~',@str,1)+1,1000) AS c1
)
,Cut2 AS
(
SELECT SUBSTRING(Cut1.c1,1,LEN(Cut1.c1)-1) + '*' AS c2 FROM Cut1
)
,Splitted AS
(
SELECT CAST('<x>' + REPLACE(Cut2.c2,'~','</x><x>') + '</x>' AS XML) AS AsXML FROM Cut2
)
SELECT SUM(CAST(SUBSTRING(numbers.value('.','varchar(100)'),1,CHARINDEX('*',numbers.value('.','varchar(100)'),1)-1) AS FLOAT))
FROM Splitted
CROSS APPLY AsXML.nodes('/x') AS the(numbers)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句