0

興味深い SQL Server 検索要件があります。

次のような部品番号の表があるとします。

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

たとえば「D12A」を検索すると、結果が返される検索を作成するにはどうすればよいですか?

現在、説明欄の全文検索を設定していますが、ユーザーが / や - などを含めなくても、部品番号に一致する部品を探しています。

DBへの読み取りアクセス権しかないため、可能であれば関数を作成するのではなく、単一のSQLステートメントでこれを実行したいと思います。

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 に答える