如果您有一个varchar字段,您可以轻松地执行SELECT * FROM TABLE WHERE ColumnA LIKE '%Test%'
以查看该列是否包含某个字符串。在SQL Server上使用LIKE语句XML数据类型
你如何做到这一点的XML类型?
我有这只会返回一个“文本”节点行下面,但我需要那个节点
select * from WebPageContent where data.exist('/PageContent/Text') = 1
如果您有一个varchar字段,您可以轻松地执行SELECT * FROM TABLE WHERE ColumnA LIKE '%Test%'
以查看该列是否包含某个字符串。在SQL Server上使用LIKE语句XML数据类型
你如何做到这一点的XML类型?
我有这只会返回一个“文本”节点行下面,但我需要那个节点
select * from WebPageContent where data.exist('/PageContent/Text') = 1
内进行搜索,您应该能够做到这一点很容易:
SELECT *
FROM WebPageContent
WHERE data.value('(/PageContent/Text)[1]', 'varchar(100)') LIKE 'XYZ%'
.value
方法为您提供实际值,您可以将其定义为VARCHAR(),然后使用LIKE语句进行检查。
请注意,这不会非常快。所以,如果你在你的XML某些领域,你需要检查很多,你可以:
有了这个,你会基本上是“提取”的XML的某些部分到计算领域,使其持续,然后你可以非常有效地搜索它(哎哟:你甚至可以指定该字段!)。
马克
这是使用基于marc_s回答什么,我要去:
SELECT
SUBSTRING(DATA.VALUE('(/PAGECONTENT/TEXT)[1]', 'VARCHAR(100)'),PATINDEX('%NORTH%',DATA.VALUE('(/PAGECONTENT/TEXT)[1]', 'VARCHAR(100)')) - 20,999)
FROM WEBPAGECONTENT
WHERE COALESCE(PATINDEX('%NORTH%',DATA.VALUE('(/PAGECONTENT/TEXT)[1]', 'VARCHAR(100)')),0) > 0
回报在哪里搜索条件存在
另一种选择是搜索的搜索子字符串将XML转换为字符串然后使用LIKE作为字符串。但是作为一个计算列不能是你需要用它在另一个WHERE子句的一部分,选择这样的:
SELECT * FROM
(SELECT *, CONVERT(varchar(MAX), [COLUMNA]) as [XMLDataString] FROM TABLE) x
WHERE [XMLDataString] like '%Test%'
另一个选择是投XML作为nvarchar和然后搜索指定字符串就好像XML是一个nvarchar字段一样。
SELECT *
FROM Table
WHERE CAST(Column as nvarchar(max)) LIKE '%TEST%'
我喜欢这个解决方案,因为它很干净,容易记忆,很难搞清楚,可以用作where子句的一部分。
编辑:由于悬崖提到它,你可以使用:
...如果为nvarchar有没有转换为varchar的搜索存储的数据[最佳方式
可能重复的字符作为XML在Sql服务器?](http://stackoverflow.com/questions/52945/best-way-to-search-data-stored-as-xml-in-sql-server) –