【问题标题】:SQL LIKE with intSQL LIKE 与 int
【发布时间】:2016-01-27 12:46:53
【问题描述】:

是否有与varchar 一起使用的LIKE 等价的东西可以与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,我希望它检索所有记录

【问题讨论】:

  • 您可以在使用前将 int 转换为 varchar。即:DECLARE @strInt varchar(20); SET @strInt = CAST(@intVal AS varchar(20)
  • 如果您传入名称和类型,您可能需要重新评估部分代码的附加值。

标签: sql sql-server wildcard


【解决方案1】:

你可以用这个:

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

【讨论】:

  • 所以我必须从front-end 传递null 而不是零?
  • @Stackuser:如果是0,你可以使用(@ptype = 0 OR fkProductTypeID = @ptype)
  • 可以!只需要正确使用逻辑运算符!伙计,我为什么不自己解决呢?总之谢谢
  • @Stackuser:如果您实际使用存储过程,我已经编辑了我的答案以提供更有效的版本。但是,请记住接受答案。
【解决方案2】:

这是你想要的吗?

select *
from Product 
where Code like '%'+ @code +'%' AND  name LIKE '%'+ @name +'%' AND
      (fkProductTypeID = @ptype or @ptype is null);

'' 对整数没有意义。而且,不要混合类型进行比较。只需为此目的使用NULL

【讨论】:

  • 错字:应该是or @ptype is null,而不是and
【解决方案3】:

这样就可以了

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

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

【讨论】:

    猜你喜欢
    • 2021-11-15
    • 1970-01-01
    • 2022-09-29
    • 2011-08-10
    • 2021-04-12
    • 2010-10-03
    • 2011-11-22
    • 1970-01-01
    • 2015-06-01
    相关资源
    最近更新 更多