2013-10-18 49 views
2

我在SQL Server 2012中使用LIKE謂詞進行了以下查詢。它用%替換空格。我在桌上有兩條記錄。與多個連續的空白空間一樣

DECLARE @MyTable TABLE (ITMEID INT, ITMDESC VARCHAR(100)) 

INSERT INTO @MyTable VALUES (1,'Healty and Alive  r') 
INSERT INTO @MyTable VALUES (2, 'A liver patient') 

DECLARE @SearchCriteria VARCHAR(100) 
SET @SearchCriteria = 'Alive' 

SELECT * 
FROM @MyTable 
WHERE (ITMDESC LIKE '%'+REPLACE(@SearchCriteria,' ','%')+'%' ESCAPE '\') 

我從朋友to consider multiple consequent white spaces as a single space得到了這個查詢。挑戰是我沒有看到這方面的任何參考。

方法中是否存在缺陷?

+1

有第二項沒有alive'的'發生 - 有一個'一live'(帶** **空間之間!),但是這是不一樣的!否則,您必須搜索'%a%live%' –

+0

@marc_s好的..我從朋友那裏得到了這個查詢,將多個相應的空白視爲單個空間。挑戰是我沒有看到這方面的任何參考?我們在堆棧溢出中有這種方法嗎? – Lijo

+0

@marc_s同意。那是我的錯誤。但是,我們有沒有參考這種方法? – Lijo

回答

0

REPLACE(@SearchCriteria,' ','%')總是返回Alive。第二行沒有Alive字,因此不會返回。

實際上,WHERE子句將如下所示:WHERE (ITMDESC LIKE '%Alive%' ESCAPE '\') 第二行不符合它。

也許,你想是這樣的:

SELECT * 
FROM @MyTable 
WHERE (REPLACE(ITMDESC,' ','') LIKE '%'[email protected]+'%' ESCAPE '\') 
0

你可以使用如下

DECLARE @MyTable TABLE (ITMEID INT, ITMDESC VARCHAR(100)) 

    INSERT INTO @MyTable VALUES (1,'Healty and Alive  r') 
    INSERT INTO @MyTable VALUES (2, 'A liver patient') 

    ECLARE @SearchCriteria VARCHAR(100) 
    SET @SearchCriteria = 'Alive' 

    SELECT * 
    FROM @MyTable 
    WHERE (REPLACE(ITMDESC,' ','') LIKE '%'[email protected]+'%' ESCAPE '\') 

它將返回兩個記錄,只要你想

0

最簡單的解決辦法是更換所有與一些綽號空間,然後用一個空格替換該綽號。

Select Replace(Replace(ItmDesc, ' ', '<z>'), '<z>', ' ') 
From MyTable 

SQL Fiddle version