Sql Server包含

时间:2012-04-30 15:21:01

标签: sql sql-server

我需要匹配部分字符串但不能打开全文索引,所以不能使用contains。我已经看过Levenstein确定两个字符串之间距离的函数,但我不是在寻找模糊匹配,而是列中的每个字符都存在于字符串中。

即。如果传递的字符串类似于AB_SYS_20120430.TXT,我希望在包含AB_SYS的任何列上匹配。类似的谓词并没有让我在那里。我真的需要相当于.NET包含的功能,但正如提到的那样打开全文索引不是一个可以打开的选项。以为我会看看是否还有其他可能的工作。

2 个答案:

答案 0 :(得分:5)

您在寻找LIKE功能吗? http://www.w3schools.com/sql/sql_like.asp

... WHERE MyColumn LIKE '%AB_SYS%'

这可能不是最佳的,但它似乎回答了你的问题...如果你只能从左侧或右侧进行搜索,可以进一步优化。

这在功能上与String.Contains相似 http://msdn.microsoft.com/en-us/library/dy85x1sa.aspx

编辑:您如何将输入文本解析为“相关”子字符串?

编辑:要搜索相同的LIKE条件,但从您的部分列到完整文字,只需附加通配符:

... WHERE 'AB_SYS_20120430.TXT' LIKE '%' + MyColumn + '%'

编辑:您建议您无法使用它。如果您添加架构,请提出您的问题,然后我可以进一步帮助您,但请考虑一下:

你有一张名为MyTable的桌子 在该表中有一个名为MyColumn的列 该表中的某些行在MyColumn中具有数据“AB_SYS”

给定参数'AB_SYS_20120430.TXT',您想要返回所有匹配的行

CREATE PROCEDURE MyTestProcedure 
    @pFullNameString nvarchar(4000) = '' -- parameter passed in, like AB_SYS_20120430.TXT
AS
BEGIN
    SELECT
        *
    FROM
        MyTable
    WHERE
        @pFullNameString LIKE '%' + MyTable.[MyColumn] + '%'
END
GO

答案 1 :(得分:2)

您可以使用CHARINDEX

WHERE  CHARINDEX(StringToCheckFor, StringToCheckIn) > 0