C# 字符串文本搜索

C# 字符串文本搜索,c#,sql,sql-server,C#,Sql,Sql Server,我有下面的字符串 汽车、公共汽车、自行车、房子 我希望将这些字符串拆分为单独的字符串,并在where子句中使用它们,因此如下所示: SELECT [text] FROM [table] WHERE text LIKE 'bus' or text LIKE 'car' or text LIKE 'bike' or text LIKE 'house' 如何遍历原始字符串并将其拆分为单独的子字符串。原始文本字符串作为变量从GUI传递。到目前为止,我们有这个 REPLACE(LEFT('%BIKE,

我有下面的字符串

汽车、公共汽车、自行车、房子

我希望将这些字符串拆分为单独的字符串,并在where子句中使用它们,因此如下所示:

SELECT [text]
FROM [table]
WHERE
text LIKE 'bus'
or text LIKE 'car'
or text LIKE 'bike'
or text LIKE 'house'
如何遍历原始字符串并将其拆分为单独的子字符串。原始文本字符串作为变量从GUI传递。到目前为止,我们有这个

REPLACE(LEFT('%BIKE, BUS, HOUSE%',CHARINDEX(',','%BIKE, BUS, HOUSE%')),',','%'),
REPLACE(SUBSTRING('%BIKE, BUS, HOUSE%',CHARINDEX(',','%LADDER, BA%'),LEN('%BIKE, BUS, HOUSE%')),',','%'),
但这只会在第一个逗号之前返回一个子字符串,并在后面保留所有内容。例如“自行车”和“汽车、公共汽车、房子”


有什么想法吗?

将LINQ与PredicateBuilder一起使用

示例-我手边有一张Zipcode表

var codes = "77,88,99".Split(',');

var predicate = PredicateBuilder.False<ZipCodes>();
foreach(var c in codes)
    predicate = predicate.Or(z=>z.ZipCode.Contains(c));

var answer = this.ZipCodes.Where(predicate).ToList();

您可以使用XML功能将字符串转换为数组,然后简单地使用通配符连接:

DECLARE @string VARCHAR(100) = 'car, bus, bike, house'
;WITH cte AS (SELECT RTRIM(LTRIM(Split.a.value('.', 'VARCHAR(100)'))) AS Txt    
              FROM  (SELECT CAST ('<M>' + REPLACE(@string, ',', '</M><M>') + '</M>' AS XML) AS DATA
              ) AS A CROSS APPLY Data.nodes ('/M') AS Split(a))
SELECT DISTINCT [text]
FROM [table] a
JOIN cte b
  ON a.[text] LIKE '%'+b.Txt+'%'

理想情况下,您可以将数组传递到表变量中,只需运行底部的联接即可。

您使用的是哪种数据库服务器?它是SQL Server吗?它是用编程语言实现的选项吗?PHP、Python等。是的SQL Server 2008R2您真的想要像“bus”一样还是像“%bus%”一样?不传递分隔字符串怎么样?单独传递参数,或者。我做了大量的ETL工作,每天都使用这个函数。