2016-11-24 32 views
-1

我想查詢搜索某列中的某些特定文本並獲取包含此文本的所有行。有沒有辦法做到我想在下面的SQL查詢中實現?我想在文本中找到所有的名稱,其中包含名稱後跟一個明確的名稱,這實際上是我想要搜索的內容,但我事先並不知道這個名字是什麼,但我知道它在一起與文本中的名字一起。用於搜索部分文本是否不相同的查詢

SELECT DISTINCT name FROM some_table WHERE xml LIKE '%name="name">[value to search for]%' 

這樣的,如果我有一個XML看起來像這樣:

<name = "name">Bob</> 
<name = "name">Alice</> 
<name = "name">Bob</> 

它會返回在文本列包含Alice和Bob,如下行。任何提示不勝感激。

<name = "name">Bob</> 
<name = "name">Alice</> 
+0

你想只是字符串,或整個值的名稱的一部分? – jarlh

+0

我希望能夠僅搜索價值。 – Left4Cookies

+0

哪個值?以格式化文本指定預期結果。 – jarlh

回答

0
Use Group By 

SELECT DISTINCT name FROM some_table WHERE xml LIKE '%name="name">[value to search for]%' GROUP BY name 
+1

但他需要一些通用的SQL querry,他的SQL querry還沒有成功。他正在尋找某種類型的正則表達式,它將從存儲的字符串中獲取價值......但那不是SQL和DBS的作用 –

+0

是的,@Take_Care_提到了什麼。我也一直在想,用SQL做這件事不太可能,但我希望可能有一些我忽略了的東西。 – Left4Cookies

+2

爲什麼GROUP BY沒有集合函數? (SELECT DISTINCT時不需要) – jarlh

0

我認爲,這個查詢可以給你出你需要的輸出:

SELECT DISTINCT name FROM some_table WHERE xml LIKE CONCAT('%name="name">' + name + '</>%') 

這將返回所有不同的名稱都有哪些,還有在xml列。

UPDATE:

答案很簡單 - 在SQL Server中的同等功能的CONCAT()是 '+'(加不加引號操作符)。

SELECT DISTINCT name FROM some_table WHERE xml LIKE '%name="name">', name ,'</>%' 
+0

@ Left4Cookies,這個解決方案是否幫助... – Vikrant

+0

感謝您的輸入,雖然它表示'+'不是此操作的有效輸入。 – Left4Cookies

0

這個工作對我來說:

SELECT DISTINCT name FROM some_table WHERE xml like CONCAT('%<name = "name">%', name,'</>%')