过滤 cte xpath 查询
Filter cte xpath query
鉴于以下 XPath CTE,我想在 Field2
上进行过滤。怎样才能做到呢?我只是在学习 XPath。使用 SQL Server 2008 R2。
WITH ConvertedToXML AS
(
SELECT TOP 10
xml_msg AS AsVarchar,
CAST(xml_msg AS XML) AS AsXml
FROM
Table
ORDER BY
date_received desc
)
SELECT
ConvertedToXML.AsXml.value('(//Field1)[1]', 'varchar(max)') AS Field1,
ConvertedToXML.AsXml.value('(//Field2)[1]', 'Varchar(10)') as Field2,
ConvertedToXML.AsVarchar,
ConvertedToXML.AsXml
Into #TempXML
FROM ConvertedToXML;
如果我对问题的理解正确,你想过滤 Field2
值等于特定值的行,例如 foo
,你可以这样做:
SELECT
......
......
Into #TempXML
FROM ConvertedToXML
WHERE ConvertedToXML.AsXml.value('(//Field2)[1]', 'Varchar(10)') = 'foo';
或使用 XPath 谓词获取 Field2
个值等于 "foo"
的元素,并使用 exists()
方法执行 XPath :
SELECT
......
......
Into #TempXML
FROM ConvertedToXML
WHERE ConvertedToXML.AsXml.exists('(//Field2[.="foo"])[1]', 'Varchar(10)') = 1;
鉴于以下 XPath CTE,我想在 Field2
上进行过滤。怎样才能做到呢?我只是在学习 XPath。使用 SQL Server 2008 R2。
WITH ConvertedToXML AS
(
SELECT TOP 10
xml_msg AS AsVarchar,
CAST(xml_msg AS XML) AS AsXml
FROM
Table
ORDER BY
date_received desc
)
SELECT
ConvertedToXML.AsXml.value('(//Field1)[1]', 'varchar(max)') AS Field1,
ConvertedToXML.AsXml.value('(//Field2)[1]', 'Varchar(10)') as Field2,
ConvertedToXML.AsVarchar,
ConvertedToXML.AsXml
Into #TempXML
FROM ConvertedToXML;
如果我对问题的理解正确,你想过滤 Field2
值等于特定值的行,例如 foo
,你可以这样做:
SELECT
......
......
Into #TempXML
FROM ConvertedToXML
WHERE ConvertedToXML.AsXml.value('(//Field2)[1]', 'Varchar(10)') = 'foo';
或使用 XPath 谓词获取 Field2
个值等于 "foo"
的元素,并使用 exists()
方法执行 XPath :
SELECT
......
......
Into #TempXML
FROM ConvertedToXML
WHERE ConvertedToXML.AsXml.exists('(//Field2[.="foo"])[1]', 'Varchar(10)') = 1;