喜欢多个连续的白色空间

时间:2013-10-18 04:57:33

标签: sql sql-server

我在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收到此查询。挑战是我没有看到任何参考。

这种方法有缺陷吗?

3 个答案:

答案 0 :(得分:0)

REPLACE(@SearchCriteria,' ','%')始终返回Alive。 Alive字,因此不会返回。

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

可能你想要这样的东西:

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

答案 1 :(得分: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 '%'+@SearchCriteria+'%' ESCAPE '\')

它会根据需要返回两个记录

答案 2 :(得分:0)

最简单的解决方案是用一些名字替换所有空格,然后用一个空格替换该名字对象。

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

SQL Fiddle version