SQL LIKE仅使用全名

SQL LIKE仅使用全名,sql,sql-like,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

在我的一个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'
或者只剪切到一个字符,我就不会得到任何结果

即使我只在其中输入一个字符,我也要加载该项


我的代码有什么问题吗?如何正确操作?

您需要切换
表达式中的项目,如
表达式:

AND a.itemdescription LIKE '%' + @ItemDesc + '%'
使用此逻辑,
itemsdescription
的任何子字符串都将匹配。例如,以下为真实情况:

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 + '%';

您需要切换
表达式中的项目,如
表达式:

AND a.itemdescription LIKE '%' + @ItemDesc + '%'
使用此逻辑,
itemsdescription
的任何子字符串都将匹配。例如,以下为真实情况:

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 + '%';

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

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

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

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

你用哪一种?“SQL”只是一种查询语言,而不是特定数据库产品的名称(并且您的问题包含非标准SQL)。请为您正在使用的数据库产品添加一个标记
DISTINCT
SELECT DISTINCT
的一部分,并适用于整个选定行。跳过那些多余的括号以使查询更清晰,即只需
选择不同的a.itemid、a.itemcode、
?“SQL”只是一种查询语言,而不是特定数据库产品的名称(并且您的问题包含非标准SQL)。请为您正在使用的数据库产品添加一个标记
DISTINCT
SELECT DISTINCT
的一部分,并适用于整个选定行。跳过那些多余的括号以使查询更清晰,即只需执行
选择不同的a.itemid,a.itemcode,…
“始终”有点太强,可能存在所述顺序正确的情况。但是你是对的,考虑到这些例子,顺序应该被切换。谢谢你是对的,我已经在当前案例的基础上发布了。“总是”有点太强了,可能有些情况下所陈述的顺序是正确的。但是你是对的,考虑到这些例子,订单应该被切换。谢谢你是对的,我已经在当前案例的基础上发布了。