<Quote xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<error>TLP3: The product has no marked price;</error>
</Quote>
我有一个存储在表的列中的xml,我使用以下查询来提取xml元素:
select
CONVERT(XML, CONVERT(NVARCHAR(max), Response)).value('(/Quote/error)[1]','nvarchar(max)') as Exception
表达式的结果是:
TL43:The product has no marked price.;
我只想选择代码:TL43
然后我想单独选择:The product has no marked price.
我有办法吗?
XML已更新
答案 0 :(得分:0)
我不确定您是否在询问使用TSQL XML功能的方法,但基本的SQL功能就足够了。
为了清晰起见,我使用CTE,但你可以在没有CTE的情况下将它们混合在一起。
我假设你可以转换最后的';'在源头'。'在你想要的输出中,如果这实际上是一个要求。
DECLARE @Response VARCHAR(MAX) = '<Quote xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<error>TLP3: The product has no marked price;</error>
</Quote>'
;WITH cte AS (
SELECT CONVERT(XML,@Response).value('(/Quote/error)[1]','nvarchar(max)') as Exception
)
SELECT LEFT(Exception,CHARINDEX(':',Exception)-1) Code
,SUBSTRING(Exception,CHARINDEX(':',Exception)+1,LEN(Exception)) Exception
FROM cte
答案 1 :(得分:0)
select substring(CONVERT(XML,CONVERT(NVARCHAR(max),Response )).value('(/Quote/error)[1]','nvarchar(max)'),0,charindex(':', CONVERT(XML,CONVERT(NVARCHAR(max),Response )).value('(/Quote/error)[1]','nvarchar(max)'))) as Excepiton