SQL在CASE语句期间检查空值

时间:2018-10-17 15:16:54

标签: sql-server

当我们按预期获得值时,以下代码可以正常工作

  case Criteria    
  when ''Security_Agent'' then substring(criteriavalue,charindex(''['',criteriavalue,8)+1,charindex('']'',criteriavalue,14)-charindex(''['',criteriavalue,8)-1)    
  when ''Agent'' then substring(criteriavalue,charindex(''['',criteriavalue,8)+1,charindex('']'',criteriavalue,14)-charindex(''['',criteriavalue,8)-1)    
  when ''Arranger'' then substring(criteriavalue,charindex(''['',criteriavalue)+1,charindex('']'',criteriavalue)-charindex(''['',criteriavalue)-1)     
  when ''Group'' then criteriavalue
  else substring(criteriavalue,charindex(''['',criteriavalue)+1,charindex('']'',criteriavalue)-charindex(''['',criteriavalue)-1)     
  end as CriteriaValue  

但是在某些情况下,上面的CRITERIAVALUE变为空白/ NULL。

如何更改以上内容,以便在不为null时显示值(表示CRITERIAVALUE字段)。为null时,忽略SUBSTRING

3 个答案:

答案 0 :(得分:2)

选项1: 在CASE中添加WHEN语句作为第一个评估,以单独输出NULL。

127.0.0.1

选项2: 如果您想用静态文本值替换空值,请使用WHEN CriteriaValue IS NULL then 'WHATEVER YOU WANT NULLS TO BE' 代替所有ISNULL(CRITERIAVALUE,'Some Text Here')

答案 1 :(得分:0)

在检查条件之前检查条件值

case when criteriavalue is not null then
 case Criteria    
  when ''Security_Agent'' then substring(criteriavalue,charindex(''['',criteriavalue,8)+1,charindex('']'',criteriavalue,14)-charindex(''['',criteriavalue,8)-1)    
  when ''Agent'' then substring(criteriavalue,charindex(''['',criteriavalue,8)+1,charindex('']'',criteriavalue,14)-charindex(''['',criteriavalue,8)-1)    
  when ''Arranger'' then substring(criteriavalue,charindex(''['',criteriavalue)+1,charindex('']'',criteriavalue)-charindex(''['',criteriavalue)-1)     
  when ''Group'' then criteriavalue
  else substring(criteriavalue,charindex(''['',criteriavalue)+1,charindex('']'',criteriavalue)-charindex(''['',criteriavalue)-1)     
  end  
end as CriteriaValue 

答案 2 :(得分:0)

您也可以像下面这样使用iif

case Criteria    
  when ''Security_Agent'' then substring(criteriavalue,charindex(''['',criteriavalue,8)+1,charindex('']'',criteriavalue,14)-charindex(''['',criteriavalue,8)-1)    
  when ''Agent'' then substring(criteriavalue,charindex(''['',criteriavalue,8)+1,charindex('']'',criteriavalue,14)-charindex(''['',criteriavalue,8)-1)    
  when ''Arranger'' then substring(criteriavalue,charindex(''['',criteriavalue)+1,charindex('']'',criteriavalue)-charindex(''['',criteriavalue)-1)     
  when ''Group'' then criteriavalue
  else iif(criteriavalue IS NULL, NULL, substring(criteriavalue,charindex(''['',criteriavalue)+1,charindex('']'',criteriavalue)-charindex(''['',criteriavalue)-1))     
  end as CriteriaValue