一尘不染

在SQL Server XML数据类型上使用LIKE语句

sql

如果您有varchar字段,则可以轻松SELECT * FROM TABLE WHERE ColumnA LIKE '%Test%'查看该列是否包含某个字符串。

您如何针对XML类型执行此操作?

我有以下返回仅具有“文本”节点的行,但我需要在该节点内搜索

select * from WebPageContent where data.exist('/PageContent/Text') = 1

阅读 203

收藏
2021-03-17

共1个答案

一尘不染

您应该能够很容易地做到这一点:

SELECT * 
FROM WebPageContent 
WHERE data.value('(/PageContent/Text)[1]', 'varchar(100)') LIKE 'XYZ%'

.value方法为您提供了实际值,您可以定义该值作为VARCHAR()返回,然后可以使用LIKE语句进行检查。

请注意,这不会太快。因此,如果您的XML中有某些字段需要大量检查,则可以:

  • 创建一个存储函数,该函数获取XML并以VARCHAR()的形式返回您要查找的值
  • 在表上定义一个新的计算字段,该字段将调用此函数,并将其设为PERSISTED列

这样,您基本上可以将XML的特定部分“提取”到一个计算字段中,使其持久化,然后可以非常高效地对其进行搜索(哎呀,您甚至可以索引该字段!)。

马克

2021-03-17