【问题标题】:SQL Server 2008 select statement that ignores non alphanumeric characters忽略非字母数字字符的 SQL Server 2008 选择语句
【发布时间】:2013-03-31 18:10:18
【问题描述】:

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

假设我有一张表,其零件编号如下:

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

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

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

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

【问题讨论】:

    标签: sql-server select non-alphanumeric


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2014-08-20
      • 1970-01-01
      • 2023-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      相关资源
      最近更新 更多