3

我需要匹配部分字符串,但无法打开全文索引,因此无法使用包含。我查看了 Levenstein 确定两个字符串之间距离的函数,但我不是在寻找模糊匹配,而是列中的每个字符都存在于字符串中。

即,如果传递的字符串类似于 AB_SYS_20120430.TXT,我想匹配任何包含 AB_SYS 的列。like 谓词没有让我到达那里。我真的需要 .NET 包含功能的等效功能,但如前所述,打开全文索引不是打开的选项。我想我会看看是否还有其他可能的解决方法。

4

2 回答 2

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
于 2012-04-30T15:25:30.447 回答
2

You could use CHARINDEX

WHERE  CHARINDEX(StringToCheckFor, StringToCheckIn) > 0
于 2012-04-30T15:45:49.343 回答