SQL LIKE работает только с полным именем - PullRequest
0 голосов
/ 15 мая 2018

В одном из моих sp у меня есть следующие строки кода

select distinct (a.itemid), a.itemcode, v.itemdescription

from aitem a
    INNER JOIN vwitemdescription v ON a.itemID = v.itemID 

WHERE a.active=1
-----------------------------------------
AND (@ItemDesc like '%'+ a.itemdescription +'%')
-----------------------------------------

Если я даю значение @ItemDesc в полном описании, я получаю значения, а если я даю значение @ItemDesc в половине описания, я ничего не получаю взамен.

Например:

Если я дам

@ItemDesc = 'Cow Dung - '

Я получаю результат как

---------------------------------------
|itemid | itemcode | itemdescription  |
--------------------------------------
|   63  | 40-17005 |   Cow Dung -     |
---------------------------------------

И даже если я обрежу строку как @ItemDesc = 'Cow Dung', я получу те же результаты,

Но если я разрежу его на @ItemDesc = 'Cow' или только на один символ, я не получу никаких результатов.

Я хочу загрузить элемент, даже если в него введен только один символ.

Что-то не так с моим кодом? Как правильно это сделать?

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Переменная сравнения всегда должна быть справа от оператора.Ваш новый запрос должен быть таким, как показано ниже.

select distinct (a.itemid), a.itemcode, v.itemdescription    
from aitem a
    INNER JOIN vwitemdescription v ON a.itemID = v.itemID     
WHERE a.active=1    
--changed condition start    
AND (a.itemdescription like '%'+ @ItemDesc +'%')
--changed condition end
0 голосов
/ 15 мая 2018

Вам необходимо переключить элементы в выражении LIKE:

AND a.itemdescription LIKE '%' + @ItemDesc + '%'

. Используя эту логику, любая подстрока из itemdescription будет соответствовать.Например, следующее условие является истинным:

AND `Cow Dung - ` LIKE '%Cow%'

Вот полный запрос:

SELECT DISTINCT
    a.itemid, a.itemcode, v.itemdescription
FROM aitem a
INNER JOIN vwitemdescription v
    ON a.itemID = v.itemID 
WHERE
    a.active = 1 AND
    a.itemdescription LIKE '%' + @ItemDesc + '%';
...