在我的一个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'
或仅剪切为单个字符,我就不会得到任何结果。
即使我只输入一个字符,我也要加载该项目。
我的代码有什么问题吗?如何做到对不对?
答案 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