如果参数为空,则在 where 语句中的 TSQL 案例

Posted

技术标签:

【中文标题】如果参数为空,则在 where 语句中的 TSQL 案例【英文标题】:TSQL Case in where statement if parameter is null 【发布时间】:2010-12-08 08:17:14 【问题描述】:

我有一个 SP,它给我带来了很多困难。

sp 获取两个参数@madeByUserId 和@reportedByUserId。 我想要类似的东西:

 select * from table
  where MadeByUserId = @madeByUserId (if(@reportedByUserID != null) and ReportedByUserID = @reportedByUserID)

基本上,我想在 where 子句中添加一个基于 @reportedByUserId 的 null/not null 状态的过滤条件

这可能吗?

非常感谢, 拉度

【问题讨论】:

【参考方案1】:

试试:

 select * from table
 where MadeByUserId = @madeByUserId 
 AND (@reportedByUserID IS null OR ReportedByUserID = @reportedByUserID)

【讨论】:

或者更简洁的方式:where MadeByUserId = @madeByUserId AND ReportedByUserID = isnull(@reportedByUserID, ReportedByUserID)【参考方案2】:

你可以使用COALESCE

SELECT  * 
FROM    Table
WHERE   MadeByUserId = @madeByUserId 
        AND ReportedByUserID = COALESCE(@reportedByUserID, ReportedByUserID)

这翻译成

 if @reportedByUserID is `NOT NULL` then 
   compare ReportedByUserID with @reportedByUserID
 else
   compare ReportedByUserID with ReportedByUserID

来自MSDN

结合

返回第一个非空表达式 在它的论点中。

【讨论】:

【参考方案3】:

添加 if 语句

如果(@reportedByUserId 不为空)

选择 * 从表 t WHERE t.MadeByUserId = madeByUserId 等

【讨论】:

【参考方案4】:

我认为这会给你你所追求的。

IF (@reportedByUser IS NULL)
    select * from table 
    where MadeByUserId = @madeByUserId
ELSE
    select * from table 
    where MadeByUserId = @madeByUserId and ReportedByUserID = @reportedByUserID)

【讨论】:

以上是关于如果参数为空,则在 where 语句中的 TSQL 案例的主要内容,如果未能解决你的问题,请参考以下文章

plsql 检查 where 子句中至少一个变量不为空

Where 子句 TSQL 中的 case 表达式

在 Java DB2 JDBC 中:如何在 SELECT 语句的 WHERE 子句中使用空参数,其中值可以为空或不为空?

MyBatis框架中的条件查询!关键字exists用法的详细解析

检查返回值是不是不为空,如果是,则在一行中使用一个方法调用将其分配

oracle中的exists 和not exists 用法详解