我有一个有趣的SQL Server搜索要求。
假设我有一个包含部件号的表格如下:
PARTNO DESCRIPTION
------ -----------
ABC-123 First part
D/12a92 Second Part
如果我搜索“D12A”,如何创建会返回结果的搜索?
我目前为描述栏设置了全文搜索,但我希望找到与该部分匹配的部分,即使用户不包含/或 - 等。
我宁愿在单个SQL语句中执行此操作,而不是在可能的情况下创建函数,因为我们只对数据库具有读访问权。
答案 0 :(得分:1)
您可以执行以下操作:
SELECT * FROM PART_TABLE
WHERE REPLACE(REPLACE(PARTNO,'/', ''),'-','') LIKE '%D12A%'
这适用于您指定的2个字符,可以扩展为更多字符,如下所示:
SELECT * FROM PART_TABLE
WHERE REPLACE(REPLACE(REPLACE(PARTNO,'/', ''),'-',''),*,'') LIKE '%D12A%'
除非您的特殊字符有限,否则可能不是最优雅的解决方案。否则,我建议编写一个函数来删除非字母数字字符。
以下是此类功能的示例:
CREATE FUNCTION dbo.udf_AlphaNumericChars
(
@String VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @RemovingCharIndex INT
SET @RemovingCharIndex = PATINDEX('%[^0-9A-Za-z]%',@String)
WHILE @RemovingCharIndex > 0
BEGIN
SET @String = STUFF(@String,@RemovingCharIndex,1,'')
@RemovingCharIndex = PATINDEX('%[^0-9A-Za-z]%',@String)
END
RETURN @String
END
------- Query Sample (untested)---------
SELECT *
FROM PART_TABLE
WHERE DBO.udf_AlphaNumericChars(PARTNO) LIKE '%D12A%'
取自:http://sqlserver20.blogspot.co.uk/2012/06/find-alphanumeric-characters-only-from.html