SQL数据库中的搜索栏忽略特殊字符
有谁知道是否可以针对SQL Server数据库中的列执行%LIKE%搜索,但让它忽略列中的任何特殊字符?SQL数据库中的搜索栏忽略特殊字符
因此,举例来说,如果我有称为列“歌曲”,他们包含以下...
黑色或白色
没有睡眠“直到布鲁克林
的船舶宋
爸爸不讲道
如果用户搜索“没有sleey直到布鲁克林”,那么我希望它返回一个匹配,即使他们忘记了包括撇号。如果他们搜索“灵魂”,我也希望它返回第四行。我相信你明白了......
任何帮助真的会被赞赏。
我会考虑使用全文索引,然后您可以使用FREETEXT和CONTAINS的力量来进行搜索。
编辑:我仍然会研究细化全文索引搜索,但是,从其他答案开始,这是一个使用REPLACE的选项。
SELECT
Artist,
Title
FROM
Songs
WHERE
REPLACE(REPLACE(REPLACE(Artist, '#',''), '*', ''), '"', '') LIKE '%Keywords%'
在SQL Server中翻译? – 2009-08-17 17:10:03
我刚刚搜索了这些功能,但找不到任何信息。 – jonhobbs 2009-08-17 17:29:12
SQL Server等价物是UPPER,LTRIM,RTRIM。没有TRANSLATE函数,但可以为每个特殊字符使用多个REPLACE函数。 – 2009-08-17 17:33:56
您将会删除各种字符。单引号,双引号,连字符,点,逗号等
您可以在您的where子句中使用正则表达式并对干净值进行匹配。 Read more about regex within SQL here。
至于你想返回SOUL的第4行的艺术..你将需要一个数据结构来标记歌曲,你将不得不搜索匹配的标签。恐怕我们需要更多关于数据结构的细节。
我使用正则表达式很糟糕,但也许能够找到一个正则表达式来删除特殊字符。谢谢 – jonhobbs 2009-08-17 17:30:07
党,打我。这听起来像是要走的路,海事组织。事实上,我现在正面临类似的情况,我正要切换到全文搜索。 – 2009-08-17 17:19:51
不幸的是,我正在研究为此编写我们自己的查询的可能性的原因是,我们目前使用全文索引,而客户端不喜欢它,因为他们说它返回了太多不相关的结果! – jonhobbs 2009-08-17 17:28:42
@Jon,你看过这个吗? http://msdn.microsoft.com/en-us/library/cc879245.aspx – 2009-08-17 18:00:42