SQL LIKE仅使用全名

时间:2018-05-15 06:10:06

标签: sql sql-like

在我的一个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 :(得分:4)

您需要切换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 + '%';

答案 1 :(得分:1)

比较变量应始终位于语句的右侧。您的新查询应如下所示。

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