0

我有一个有趣的 SQL Server 搜索需求。

假设我有一张带有零件编号的表格,如下所示:

PARTNO    DESCRIPTION
------    -----------
ABC-123   First part
D/12a92   Second Part

如果我搜索“D12A”,如何创建一个返回结果的搜索?

我目前为描述列设置了全文搜索,但我希望找到与部件 no 匹配的部件,即使用户不包含 / 或 - 等。

如果可能,我宁愿在单个 SQL 语句中执行此操作,而不是创建函数,因为我们只有对 DB 的读取访问权限。

4

1 回答 1

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

于 2013-04-09T12:22:20.277 回答