这是问题所在-我有一个数据库列,其中包含用户填写的产品序列号,但没有任何类型的过滤器。例如,用户可以根据自己的解释将字段填写为:DC-538,DC 538或DC538-因为序列号通常在产品的金属部分中,因此很难知道是否有空白考试空间。
我无法设置当前列值的格式,因为那是很多品牌,我们不确定是否取出非字母数字字符会导致问题。我的意思是,如果他们认为这些字符是官方号码的一部分。例如:“ DC-538-XXX”和“ DC538-XXX”可能与2种不同的产品有关。可能性很小,但我们不能认为它不会发生。
现在,我需要在我的网站中按序列号进行搜索...但是,如果用户搜索的是“ DC538”而不是“ DC 538”,那么他将找不到它。最好的方法是什么?
我认为,理想的解决方案是选择一种将搜索准确的字符串,并从搜索项中剥离非字母数字,并将其与数据库中已剥离的字符串进行比较(我没有)的选择。但是我不知道是否只有SQL可以做到这一点。
有任何想法吗 ?
干杯
通过使用下面的功能(此处提供了答案)并将其修改为返回数字字符:
CREATE FUNCTION [dbo].[RemoveNonAlphaCharacters] (@Temp VARCHAR(1000))
RETURNS VARCHAR(1000)
AS
BEGIN
DECLARE @KeepValues AS VARCHAR(MAX)
SET @KeepValues = '%[^a-z0-9]%'
WHILE PatIndex(@KeepValues, @Temp) > 0
SET @Temp = Stuff(@Temp, PatIndex(@KeepValues, @Temp), 1, '')
RETURN @Temp
END
您可以执行以下操作:
DECLARE Input NVARCHAR(MAX)
SET @Input = '%' + dbo.RemoveNonAlphaCharacters('text inputted by user') + '%'
SELECT *
FROM Table
WHERE dbo.RemoveNonAlphaCharacters(ColumnCode) LIKE @Input
这是一个示例工作的SQLFiddle
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句