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

时间:2015-01-26 15:50:07

标签: sql sql-server null isnull ifnull

我似乎无法弄清楚如何在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 

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

如果该行没有错误,则应该只是一个空/空字段。

4 个答案:

答案 0 :(得分:4)

您可以使用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 

答案 1 :(得分:1)

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

e.g。

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

答案 2 :(得分:1)

是的!我知道我想晚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

答案 3 :(得分: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