我在列中有一个序列化的数据,我希望从以下形式检索单个值:
<FirstNode>Something</><SecondNode>Something Else</>
我想从SQL Server中检索“Something”。我尝试了以下内容:
declare @data xml;
set @data = cast([my data source] as xml);
select @data.value('(/UserName)[1]','varchar(50)')
我可能不喜欢这个,我在解析XML方面没有太多的经验。任何帮助都会很棒。
编辑:我收到错误
XML解析:第1行,第20个字符,非法限定名称字符
答案 0 :(得分:1)
只需使用CHARINDEX和SUBSTRING函数即可获取所需的数据。将我的例子变成一个函数可能是你最好的选择。
DECLARE @tbl TABLE(data VARCHAR(MAX))
INSERT INTO @tbl VALUES
('<FirstNode>Something</><SecondNode>Something Else</>'),
('<SecondNode>Something Else</><FirstNode>More Something</>'),
('<BadNoe>Something</><SecondNode>Something Else</>')
DECLARE @fnd VARCHAR(64)
DECLARE @end VARCHAR(64)
SET @fnd = '<FirstNode>'
SET @end = '</>'
SELECT SUBSTRING(a.[data], a.[start] + LEN(@fnd), a.[end] - (a.[start] + LEN(@fnd)))
FROM (SELECT data [data], CHARINDEX(@fnd, data, 0) [start], CHARINDEX(@end, data, CHARINDEX(@fnd, data, 0)) [end] FROM @tbl) a
WHERE a.[start] > 0