如何在选择语句中检查列值是否为空

时间:2018-11-03 12:33:18

标签: sql sql-server

我是SQL Server的新手,我想验证select语句中的列值是NULL还是空。

select语句为:

SELECT COM_TYPE, COM_IN_CHARGE_POSITION 
FROM TABLE_01 

如果COM_TYPE的值为空或为空,我想以与COM_TYPE_OTHERS相同的方式将COM_TYPE的值设为COM_IN_CHARGE_POSITION

这仅仅是COM_TYPE和COM_IN_CHARGE_POSITION为null还是空,我想从其他两列中获取值。

有人可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:3)

让我假设空白为NULL。在这种情况下,您只需要coalesce()

select coalesce(COM_TYPE, COM_TYPE_OTHERS, COM_IN_CHARGE_POSITION, COM_IN_CHARGE_POSITION_OTHERS) as effective_COM_TYPE

coalesce()函数采用第一个非NULL参数。如果值可以是空字符串或除NULL之外还带有空格的字符串,则建议使用case表达式。

答案 1 :(得分:2)

COALESCE函数可以检查哪一个列第一个非NULL,但是如果要检查是null还是空,则可以尝试使用CASE WHEN

SELECT  CASE WHEN COM_TYPE IS NULL OR COM_TYPE = '' THEN COM_TYPE_OTHERS 
             ELSE COM_TYPE END AS COM_TYPE,
        CASE WHEN COM_IN_CHARGE_POSITION IS NULL OR COM_IN_CHARGE_POSITION = '' THEN COM_IN_CHARGE_POSITION_OTHERS 
             ELSE COM_IN_CHARGE_POSITION END AS COM_IN_CHARGE_POSITION,
FROM TABLE_01 

答案 2 :(得分:1)

您可以使用COALESCE()ISNULL()CASE WHEN语句

SELECT COALESCE( COM_TYPE, COM_TYPE_OTHERS ) AS COM_TYPE,
       COALESCE (COM_IN_CHARGE_POSITION , COM_IN_CHARGE_POSITION_OTHERS) AS COM_IN_CHARGE_POSITION 
FROM   TABLE_01

答案 3 :(得分:1)

检查null或空值的最简单方法是使用ISNULLNULLIF

SELECT ISNULL(NULLIF(COM_TYPE, ''), COM_TYPE_OTHERS)
FROM TABLE_01

您还可以使用COALESCE,但是它不会检查空字符串(仅是null),因此您仍然必须使用NULLIF

还要注意,ISNULLCOALESCE快,即使两者之间的差异可以忽略不计。