使用 sql - 在 select 语句中不为空

using sql - Is not null in a select statement

我似乎无法弄清楚如何在 sql 中使用与 isnull 或 ifnull 语句相反的语句。我需要说明如果 a.Error1 不为空——然后打印 ' - ' 和 + CHAR(13)+CHAR(10)。基本上,如果 a.Error1 返回 null,则不应有破折号或换行符。因此,如果该字段不为空,则打印信息。

select a. .... 
' - ' + a.Error1 + CHAR(13)+CHAR(10) + 
' - ' + a.Error2 + CHAR(13)+CHAR(10) + 
' - ' + a.Error3 + CHAR(13)+CHAR(10) + 
' - ' + a.Error4 + CHAR(13)+CHAR(10) + 
' - ' + a.Error5 + CHAR(13)+CHAR(10) + 
' - ' + a.Error6                      as 'error_message'
... 
from table1 a 

例如,如果对于给定记录错误 1、2 和 5 返回输出,我希望输出如下:
- 错误 1:有一个 ...
- 错误 2:....
- 错误 5:数据是 ...

如果该行不存在错误,它应该只是一个 empty/null 字段。

您可以使用 CASE:

SELECT a. ....
       (CASE WHEN a.Error1 IS NOT NULL 
             THEN ' - ' + a.Error1 + CHAR(13)+CHAR(10)  
             ELSE ''
        END) +
       (CASE WHEN a.Error2 IS NOT NULL 
             THEN ' - ' + a.Error2 + CHAR(13)+CHAR(10)  
             ELSE ''
        END) +
       (CASE WHEN a.Error3 IS NOT NULL 
             THEN ' - ' + a.Error3 + CHAR(13)+CHAR(10)  
             ELSE ''
        END) +

   ...etc 
SELECT (CASE WHEN a.Error1 IS NOT NULL
            THEN ' - ' + a.Error1 + CHAR(13)+CHAR(10) +
            ELSE a.Error1
            END) +
      (CASE WHEN a.Error2 IS NOT NULL
            THEN ' - ' + a.Error2 + CHAR(13)+CHAR(10) +
            ELSE a.Error2
            END) +
    .....etc

COALESCE 函数可以满足您的需求。 COALESCE 的结果是它传递的第一个 NOT NULL 值。下面我们使用 '',它与 NULL 不同,因此外部 + 始终应用于 NOT NULL 字符串。

例如

select a. .... 
    COALESCE( ' - ' + a.Error1 + CHAR(13)+CHAR(10), '' ) + 
    COALESCE( ' - ' + a.Error2 + CHAR(13)+CHAR(10), '' ) + 
    COALESCE( ' - ' + a.Error3 + CHAR(13)+CHAR(10), '' ) + 
    COALESCE( ' - ' + a.Error4 + CHAR(13)+CHAR(10), '' ) + 
    COALESCE( ' - ' + a.Error5 + CHAR(13)+CHAR(10), '' ) + 
    COALESCE( ' - ' + a.Error6 , '' ) as 'error_message'
... 
from table1 a

是的!我知道我晚了 5 年,但我也遇到了这个问题。

奇怪的是它不存在某种 !ISNULL() 但无论如何。

试试这个以获得更清晰的代码:

select a. .... 
 IIF(a.Error1 IS NOT NULL, ' - ' + a.Error1 + CHAR(13)+CHAR(10) , '') as Error1,
 IIF(a.Error1 IS NOT NULL, ' - ' + a.Error1 + CHAR(13)+CHAR(10) , '') as Error2
from table1 a 

了解有关 IIF() 函数的更多信息:SQL Server IIF Function