如果您有一個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) –