2

我似乎无法弄清楚如何在 sql 中使用与 isnull 或 ifnull 语句相反的语句。我需要说 if a.Error1is not null ——然后打印' - '和 + 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 

例如,如果对于给定的记录 error1、2 和 5 返回输出,我希望输出如下:
- Error1: There was a ...
- Error2: ....
- Error5: The data was ...

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

4

4 回答 4

6

您可以使用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 
于 2015-01-26T15:53:22.697 回答
3

是的!我知道我已经晚了 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 函数

于 2020-05-22T09:52:38.060 回答
2

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
于 2015-01-26T16:57:31.363 回答
0
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
于 2015-01-26T15:54:44.537 回答