C# 如何选择列中包含任何字符串单词的所有行

C# 如何选择列中包含任何字符串单词的所有行,c#,sql,sql-server,C#,Sql,Sql Server,我从问这个问题开始 虽然我现在的问题几乎是一样的,但它有着完全不同的目的,因此我担心答案可能会有所不同,这会掩盖上一个问题 我正在做一个搜索引擎类型的东西。我需要搜索存储在数据库中的标题,查看它是否包含搜索文本框中的任何单词。然后,我计划遍历这些行中的每一行,计算匹配的单词数,并相应地对结果进行排序。我相信这件事已经做了很多次了。我就是想不出没有它怎么办 select * from table 然后用c对其进行排序,您可以尝试以下方法: SELECT * FROM table WHERE na

我从问这个问题开始 虽然我现在的问题几乎是一样的,但它有着完全不同的目的,因此我担心答案可能会有所不同,这会掩盖上一个问题

我正在做一个搜索引擎类型的东西。我需要搜索存储在数据库中的标题,查看它是否包含搜索文本框中的任何单词。然后,我计划遍历这些行中的每一行,计算匹配的单词数,并相应地对结果进行排序。我相信这件事已经做了很多次了。我就是想不出没有它怎么办

select * from table

然后用c对其进行排序,您可以尝试以下方法:

SELECT * FROM table WHERE name LIKE '%word1%' OR name LIKE '%word2%';
%符号与典型搜索中的*类似

要获取字符串并为多个单词创建此查询,可以执行以下操作:

String inputString = "hello my friend";
String[] wordlist = inputString.split(" ");
String query = "SELECT * FROM table WHERE 0=0 ";
for(String word : wordlist) {
    query += "OR name LIKE '%" + word + "%' "; 
}

字符串末尾的空格很重要,不要忘记它们!此外,您可能希望在拆分字符串之前对其进行清理,删除额外的标点符号,甚至删除a或or to等词。

您可以尝试以下方法:

SELECT * FROM table WHERE name LIKE '%word1%' OR name LIKE '%word2%';
%符号与典型搜索中的*类似

要获取字符串并为多个单词创建此查询,可以执行以下操作:

String inputString = "hello my friend";
String[] wordlist = inputString.split(" ");
String query = "SELECT * FROM table WHERE 0=0 ";
for(String word : wordlist) {
    query += "OR name LIKE '%" + word + "%' "; 
}

字符串末尾的空格很重要,不要忘记它们!此外,您可能希望在拆分字符串之前对其进行清理,删除额外的标点符号,甚至删除a或or to等词。

sql server中的一种方法是

像这样在临时表中输入单词

DECLARE @SearchWords TABLE (
  word varchar(30) )

INSERT INTO @SearchWords
        (word)
VALUES  ('Jack')
       ,('Pontiac')
       ,('Bloggs');
然后将此表与实际表联接

SELECT a.* FROM table_data a
INNER JOIN @SearchWords b on a.record_desc like '%' + b.word + '%'

sql server中的一种方法是

像这样在临时表中输入单词

DECLARE @SearchWords TABLE (
  word varchar(30) )

INSERT INTO @SearchWords
        (word)
VALUES  ('Jack')
       ,('Pontiac')
       ,('Bloggs');
然后将此表与实际表联接

SELECT a.* FROM table_data a
INNER JOIN @SearchWords b on a.record_desc like '%' + b.word + '%'


我得到了类似%的东西,但是如果他们在文本框中输入15个单词,我的查询中就必须有那么多or语句,这是可能的,只是很麻烦。你可以通过在空格上拆分输入字符串,然后循环查询结果来构建查询。或者你可以运行查询15次,然后合并结果。我倾向于运行15次,不管有多少单词,然后合并,这看起来真的很低效。到目前为止,我认为通过循环构建查询是一种可行的方法。似乎总有一种比我想象的更优雅的方式,我只是在答案中添加了一些代码,可能会有所帮助。不过,请注意避开这些字符串。谢谢你,到目前为止,这是我能使用的唯一可行的答案,不过对于未来的观众,我想你可能会想删除标点符号。,?至少我得到了类似%的东西,但是如果他们在文本框中输入15个单词,我的查询中就必须有那么多or语句,这是可能的,只是很麻烦。你可以通过在空格上拆分输入字符串,然后循环查询结果来构建查询。或者你可以运行查询15次,然后合并结果。我倾向于运行15次,不管有多少单词,然后合并,这看起来真的很低效。到目前为止,我认为通过循环构建查询是一种可行的方法。似乎总有一种比我想象的更优雅的方式,我只是在答案中添加了一些代码,可能会有所帮助。不过,请注意避开这些字符串。谢谢你,到目前为止,这是我能使用的唯一可行的答案,不过对于未来的观众,我想你可能会想删除标点符号。,?至少你可以在这里给我一个完整的查询,我从来没有使用过临时表。@K'Leg这是一个完整的查询,你需要在表中推送你要在表列中搜索的单词。在查询表中,data是你的表名,claumname record是列名。这只是你失去我的第一行。我希望这会为我创建一个诱人的变量,但事实并非如此,因此我得到了必须声明表变量的错误@SearchWords@K“Leg-抱歉忘记了,但它现在已更新。这将适用于您。这将搜索所有子字符串,而不仅仅是单词。”@这就是你想要的吗?你能不能给我一个完整的问题,我从未使用过临时表。@K'Leg这是一个完整的查询,您需要在查询表中的表列中推送您要搜索的表中的单词。\u数据是您的表名,claumng name record_desc和列名这只是您丢失我的第一行。我希望这会为我创建一个诱人的变量,但事实并非如此,因此我得到了必须声明表变量的错误@SearchWords@K“Leg-抱歉忘记了,但它现在已更新。这将适用于您。这将搜索所有子字符串,而不仅仅是单词。”@这就是你想要的吗?要获得任何可以称为搜索引擎功能和性能的东西,你需要使用类似Microsoft全文搜索或Lucene的东西。类TSQL语句的性能将很差,尤其是使用mu时
多个搜索词。所以我最好开始查看Microsoft全文search@K“以不同的方式保存或构建数据,因此不必像这样使用。这在你的情况下是否实际可行是另一回事。。。以及如何开发自己的搜索引擎engine@BrankoDimitrijevic你能解释一下我可能如何以不同的方式构建数据吗?要获得任何可以称为搜索引擎功能和性能的东西,你需要使用Microsoft全文搜索或Lucene之类的工具。类TSQL语句的性能会很差,尤其是在有多个搜索词的情况下。因此,我最好开始研究Microsoft全文search@K“以不同的方式保存或构建数据,因此不必像这样使用。这在你的情况下是否实际可行是另一回事。。。以及如何开发自己的搜索引擎engine@BrankoDimitrijevic你能解释一下我如何以不同的方式构建数据吗。