用于搜索部分文本是否不相同的查询

问题描述:

我想查询搜索某列中的某些特定文本并获取包含此文本的所有行。有没有办法做到我想在下面的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

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

我认为,这个查询可以给你出你需要的输出:

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

这个工作对我来说:

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