2013-04-09 152 views
0

我有一個有趣的SQL Server搜索要求。SQL Server 2008 select語句忽略非字母數字字符

說我有一個零件編號表如下:

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

如何創建一個搜索,如果我搜索,比方說,對於「D12A」將返回的結果嗎?

我現在有一個完整的文本搜索設置爲描述列,但我希望找到不匹配,甚至在一部分部件時,用戶不包括/或 - 等

我會而是在單個SQL語句中執行此操作,而不是在可能的情況下創建函數,因爲我們只能讀取數據庫。

回答

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