SQL数据库中的搜索栏忽略特殊字符

问题描述:

有谁知道是否可以针对SQL Server数据库中的列执行%LIKE%搜索,但让它忽略列中的任何特殊字符?SQL数据库中的搜索栏忽略特殊字符

因此,举例来说,如果我有称为列“歌曲”,他们包含以下...


黑色或白色

没有睡眠“直到布鲁克林

的船舶宋

爸爸不讲道


如果用户搜索“没有sleey直到布鲁克林”,那么我希望它返回一个匹配,即使他们忘记了包括撇号。如果他们搜索“灵魂”,我也希望它返回第四行。我相信你明白了......

任何帮助真的会被赞赏。

我会考虑使用全文索引,然后您可以使用FREETEXT和CONTAINS的力量来进行搜索。

编辑:我仍然会研究细化全文索引搜索,但是,从其他答案开始,这是一个使用REPLACE的选项。

SELECT 
    Artist, 
    Title 
FROM 
    Songs 
WHERE 
    REPLACE(REPLACE(REPLACE(Artist, '#',''), '*', ''), '"', '') LIKE '%Keywords%' 
+0

党,打我。这听起来像是要走的路,海事组织。事实上,我现在正面临类似的情况,我正要切换到全文搜索。 – 2009-08-17 17:19:51

+0

不幸的是,我正在研究为此编写我们自己的查询的可能性的原因是,我们目前使用全文索引,而客户端不喜欢它,因为他们说它返回了太多不相关的结果! – jonhobbs 2009-08-17 17:28:42

+0

@Jon,你看过这个吗? http://msdn.microsoft.com/en-us/library/cc879245.aspx – 2009-08-17 18:00:42

使用TRANSLATE, UPPER, and TRIM的组合。

+0

在SQL Server中翻译? – 2009-08-17 17:10:03

+0

我刚刚搜索了这些功能,但找不到任何信息。 – jonhobbs 2009-08-17 17:29:12

+0

SQL Server等价物是UPPER,LTRIM,RTRIM。没有TRANSLATE函数,但可以为每个特殊字符使用多个REPLACE函数。 – 2009-08-17 17:33:56

您将会删除各种字符。单引号,双引号,连字符,点,逗号等

您可以在您的where子句中使用正则表达式并对干净值进行匹配。 Read more about regex within SQL here

至于你想返回SOUL的第4行的艺术..你将需要一个数据结构来标记歌曲,你将不得不搜索匹配的标签。恐怕我们需要更多关于数据结构的细节。

+0

我使用正则表达式很糟糕,但也许能够找到一个正则表达式来删除特殊字符。谢谢 – jonhobbs 2009-08-17 17:30:07