在SQL中断开参数并进行搜索

时间:2011-08-02 20:23:04

标签: sql

基本上我有一个字符串传递给变量..说

@MyParameter =     "Flower Beer Dog" 

所以我想要做的就是找到包含“Flower”,“Beer”或“Dog”的所有记录

如果我说的话就像是

select * from myTable where myColumn = 'Flower' or myColumn = 'Beer' or myColumn = 'Dog'

但问题是我在@MyParameter中获取它并且我不确定如何拆分它并将其转换为上面的查询

3 个答案:

答案 0 :(得分:1)

这将返回一个表,该表将分隔的字符串显示为单独的字段。即:“花啤酒狗”成为

啤酒

该函数使用逗号分隔而不是空格,但如果需要,可以更改该部分。

CREATE Function [dbo].[ParseStringList]  (@StringArray nvarchar(max) )  
Returns @tbl_string Table  (ParsedString nvarchar(max))  As  

BEGIN 

DECLARE @end Int,
        @start Int

SET @stringArray =  @StringArray + ',' 
SET @start=1
SET @end=1

WHILE @end<Len(@StringArray)
    BEGIN
        SET @end = CharIndex(',', @StringArray, @end)
        INSERT INTO @tbl_string 
            SELECT
                Substring(@StringArray, @start, @end-@start)

        SET @start=@end+1
        SET @end = @end+1
    END

RETURN
END

然后你就这样使用它:

SELECT * 
FROM table
WHERE searchfield In (Select ParsedString From dbo.ParseStringList(@StringArray))

答案 1 :(得分:1)

你可以使用LIKE做这样的事情 -

select * from myTable 
where '|' + REPLACE(@MyParameter,' ','|') + '|'
like '%|' + myColumn  + '|%'

从这个问题中采取的技巧 - Parameterize an SQL IN clause

答案 2 :(得分:0)

您可能需要查看以下有关SQL中字符串拆分的帖子。从那里,您可以使用返回的值来检查您的表:

How do I split a string so I can access item x?

这是一个非常重要的问题,如果可能的话,在数据到达SQL之前可能更容易解决。