我需要匹配部分字符串但不能打开全文索引,所以不能使用contains。我已经看过Levenstein确定两个字符串之间距离的函数,但我不是在寻找模糊匹配,而是列中的每个字符都存在于字符串中。
即。如果传递的字符串类似于AB_SYS_20120430.TXT,我希望在包含AB_SYS的任何列上匹配。类似的谓词并没有让我在那里。我真的需要相当于.NET包含的功能,但正如提到的那样打开全文索引不是一个可以打开的选项。以为我会看看是否还有其他可能的工作。
答案 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