如何在select语句中检查列值是否为空?

4

我是SQL Server的新手,我想在select语句中验证一个列值是否为NULL或空。

该select语句如下:

SELECT COM_TYPE, COM_IN_CHARGE_POSITION 
FROM TABLE_01 

如果COM_TYPE的值为空或null,我希望以同样的方式将COM_TYPE_OTHERS的值作为COM_TYPE,并且将COM_IN_CHARGE_POSITION也按照相同的方式处理。

简单来说,如果COM_TYPECOM_IN_CHARGE_POSITION都为空或null,那么我想从其他两列中获取值。

有没有人能帮我解决这个问题?

请注意,被接受的答案没有检查空字符串。 - Yann39
4个回答

4

假设空值为 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 表达式。

3

COALESCE函数可以检查哪个列是第一个非空值,但是如果你想检查是否为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 

3

检查空或空字符串的最简单方法是使用 ISNULLNULLIF

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

你也可以使用COALESCE,但它不检查空字符串(只检查null),所以你仍然需要使用NULLIF

此外,请注意ISNULLCOALESCE更快,即使差异非常微小。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接