簡體   English   中英

文字搜尋字串

[英]String of text search

我有以下字符串。

汽車,公共汽車,自行車,房屋

我想將它們拆分成單獨的字符串,並在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一起使用( http://www.albahari.com/nutshell/predicatebuilder.aspx

(示例-我有一個方便的ZipCodes表)

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功能將字符串轉換為數組,然后只需使用通配符JOIN即可:

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+'%'

理想情況下,您要將數組傳遞到表變量中,而只需要在底部運行JOIN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM