如果另一列为空,则选择一列
Posted
技术标签:
【中文标题】如果另一列为空,则选择一列【英文标题】:Select a column if other column is null 【发布时间】:2012-03-26 19:35:28 【问题描述】:我需要从表中选择一个名为 ProgramID 的字段,如果 ProgramID 为 NULL,那么我需要从同一个表中选择 InterimProgramID 中的值并将其别名为 ProgramID。
如何创建条件 SELECT 语句来执行此操作?
【问题讨论】:
【参考方案1】:你需要 ISNULL 函数。
SELECT ISNULL(a, b)
如果a
为空,则选择b
。
此外,您可以使用 WHEN/THEN 选择选项,在 BOL 中查找。本质上:它的 c switch/case 块符合 SQL。
【讨论】:
mysql 等价于 IFNULL dev.mysql.com/doc/refman/5.7/en/… 和它的a || b
在javascript中
PostgreSQL 等效值为 NULLIF postgresql.org/docs/current/…
我的意思是这个问题被严格标记为 tsql【参考方案2】:
您可以使用ISNULL 函数或COALESCE 函数。他们都做几乎相同的事情,但是ISNULL
只接受两个参数,COALESCE
接受多个参数(返回它遇到的第一个非 null)。两者都尝试第一个参数,然后是第二个,(并且 COALESCE 继续)
DECLARE @IAMNULL VARCHAR
DECLARE @IAMNOTNULL VARCHAR
SET @IAMNOTNULL = 'NOT NULL'
SELECT ISNULL(@IAMNULL, @IAMNOTNULL)
--Output: 'NOT NULL'
DECLARE @IAMNULLALSO VARCHAR
SELECT COALESCE(@IAMNULL, @IAMNULLALSO, @IAMNOTNULL)
--Output: 'NOT NULL'
【讨论】:
【参考方案3】: select COALESCE ( ProgramID , InterimProgramID ) as 'ProgramID'
【讨论】:
这个解决方案似乎最好地回答了这个问题【参考方案4】:SELECT ProgramID
FROM a_table
WHERE ProgramID IS NOT NULL
UNION
SELECT InterimProgramID AS ProgramID
FROM a_table
WHERE ProgramID IS NULL;
【讨论】:
【参考方案5】:还有:
Select NVL(Column_A, Column_B) From 'schema'.'table_name'
NVL( ) 函数在 Oracle 中可用,在 MySQL 或 SQL Server 中不可用。此函数用于将 NULL 值替换为另一个值。类似于 MySQL 中的 IFNULL 函数和 SQL Server 中的 ISNULL 函数。
https://www.1keydata.com/sql/sql-nvl.html
【讨论】:
【参考方案6】:Coalesce('zzz-' + ProgramID, InterimID) as programID 仍然会忽略 ProgramID,即使您有一个借口值。这是一个很酷的小功能
【讨论】:
【参考方案7】:你也可以使用IFNULL函数
select IFNULL(ProgramId,interimId) as ProgramId
【讨论】:
这个问题是关于 SQL Server 的,IFNULL
与那个 DBMS 不存在,只有ISNULL
以上是关于如果另一列为空,则选择一列的主要内容,如果未能解决你的问题,请参考以下文章