2

LIKE在 SQL Server 2012 中有以下带有谓词的查询。它用 % 替换空格。我在表中有两条记录。

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

这种方法有陷阱吗?

4

3 回答 3

0

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

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

SQL 小提琴版本

于 2013-10-18T05:24:15.473 回答
0

REPLACE(@SearchCriteria,' ','%')总是返回Alive。第二行没有Alive单词,因此没有返回。

事实上,WHERE从句看起来是这样的:WHERE (ITMDESC LIKE '%Alive%' ESCAPE '\') 第二行不符合它。

可能,你想要这样的东西:

SELECT *
FROM @MyTable
WHERE (REPLACE(ITMDESC,' ','') LIKE '%'+@SearchCriteria+'%' ESCAPE '\') 
于 2013-10-18T05:01:34.287 回答
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 '\')

它将根据需要返回两条记录

于 2013-10-18T05:05:19.873 回答