SQL LIKE与int

时间:2016-01-27 12:46:54

标签: sql sql-server wildcard

我们与LIKE一起使用的varchar是否可以与int一起使用?

我想过滤三个parameters,其中两个是varchar所以我可以使用LIKE,如果我得到一个空字符串,我仍然可以检索所有记录。但是,如何使用int

实现类似的功能

我想检索即使fkProductTypeID不存在: 这是我的问题:

select * from Product 
where Code like '%'+ @code +'%' AND  name LIKE '%'+ @name +'%'
AND fkProductTypeID = @ptype

我希望它能够检索结果,即使我提供的ID不存在。从前端开始,如果我在@code中传递“@name”,在@ptype中传递0,我希望它能够检索所有记录

3 个答案:

答案 0 :(得分:2)

你可以用这个:

select * from Product 
where Code like '%'+ @code +'%' AND  name LIKE '%'+ @name +'%'
AND (@ptype IS NULL OR fkProductTypeID = @ptype)

如果它在存储过程中,您应该使用IF ... ELSE

CREATE PROCEDURE dbo.SP_Name(@ptype int, @code varchar(1000), @name varchar(1000))
AS
BEGIN
    IF @ptype IS NULL
    BEGIN
        select * from Product 
        where Code like '%'+ @code +'%' AND  name LIKE '%'+ @name +'%'
    END
    ELSE
    BEGIN
        select * from Product 
        where Code like '%'+ @code +'%' AND  name LIKE '%'+ @name +'%'
        AND fkProductTypeID = @ptype
    END
END

答案 1 :(得分:1)

这是你想要的吗?

&"')"

select * from Product where Code like '%'+ @code +'%' AND name LIKE '%'+ @name +'%' AND (fkProductTypeID = @ptype or @ptype is null); 对整数没有意义。并且,不要混合类型进行比较。只需使用''即可。

答案 2 :(得分:0)

以这种方式可能

 select * from Product 
 where CASE WHEN @code>0 THEN Code ELSE 0 END  like '%'+ @code +'%' 

 AND  name LIKE '%'+ @name +'%'
 AND fkProductTypeID = @ptype