mysql - SQL Server 中如果value 为null 有两种含义,如何获取记录?

标签 mysql sql-server

我有一个名为“Process”的表。它有以下列:

  • 进程号
  • 进程类型
  • 状态
  • 创建日期
  • 更新日期
  • 创建者

Status 可以是 1,2,3 和 null。

  • 状态 1 = 批准过程
  • 状态 2 = 未获批准的过程
  • 状态 3 = 已取消流程
  • 状态 null = 进行中

现在我有一个带有网格、下拉菜单和按钮的页面。下拉列表包含“批准(1),不批准(2),取消(3)”选项。我正在做的是,如果下拉列表中没有选择,我将获取所有记录。我得到下拉的值,如果下拉没有选择,它是空的。在 SQL 查询中,我实现了如果 @status 参数为 null 则获取所有记录,如果 @status 参数获得值 (1,2,3) 然后我过滤它.以下是查询:

@status as int = null
Select * 
From Process
where @status IS NULL 
Or  Process.status = @status

到这里为止,一切对我来说都很好。现在有趣的是我需要在下拉进行中中添加一个新选项。在进程表中, 正在进行的进程具有空值。我已经在决定@status 是否为空以获取所有记录。如果在下拉列表中没有选择获取所有记录,如果选择了进行中,那么我如何管理只获取状态为空的记录?请提出建议。

最佳答案

我想你想要这样的东西:

Select p.* 
From Process p
where coalesce(p.status, 'In Progress') = @status;

我应该注意到您的查询不正确,因为 = NULL never 返回 true。我假设您希望您的原始查询是:

Select * 
From Process
where @status is null or
      Process.status = @status

关于mysql - SQL Server 中如果value 为null 有两种含义,如何获取记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40647775/

相关文章:

mysql - JOOQ如何查询日期之间

mysql - 选择并显示表中具有相同值的行数

mysql - SQL 计算 case sqlite 的每次出现

sql-server - 从 select 语句更新 SQL

mysql - 离开加入具体条件请帮助

PHP 查询无法检查数据库中的用户名

sql-server - Docker-compose MS SQL attach_dbs

sql - MS SQL Server - 使用 Case 语句从 3 条记录创建一行

sql-server - Visual Studio 社区 : how to view data or run SQL in the "SQL Server Object Explorer"

c# - 使用 groupby、sum 和 count 将 SQL 转换为 Linq