连接Select语句时处理空字符串

时间:2011-11-09 15:21:35

标签: sql-server vb.net

我有这个简单的查询:

select a.str_number+' '+a.str_name+' '+a.str_suffix+' '+a.str_apt AS addr from mytable

只要没有任何连接值不为NULL,此查询就会起作用。如果any为null,则不显示地址。

我试过了:

select IsNULL(a.str_number+' '+a.str_name+' '+a.str_suffix+' '+a.str_apt AS addr,'') from table

我想要完成的是,如果值为null,则将NULL替换为空格,但仍然没有值。

3 个答案:

答案 0 :(得分:1)

这是Ted Codd关系数据库规则的结果。 As applied to MS SQL

  

理想情况下,任何使用NULL的操作都应该导致NULL。虽然过去存在一些问题,因为有些SQLServer选项可以决定如何处理NULL(而不是以“确定”的方式处理它)。

     
      
  • ANSI_NULLS:如果为OFF,则NULL = NULL为True以进行比较。如果为ON(默认值),则NULL = NULL将返回UNKNOWN(理想情况)。

  •   
  • CONCAT_NULL_YIELDS_NULL:如果为ON,则以理想的方式处理NULL。例如NULL +< numValue> = NULL。如果为OFF,则以非标准方式处理NULL,使得NULL +< Value> =< Value>。 (根据BOL向后兼容,完全说明了这一点)

  •   

Null基本上意味着:我们不知道这个的价值,因此我们不应该尝试使用它。我相信SQL可以区分null和空字符串,所以我会存储一个空字符串“”,如果这是我以后想要在串联中使用的话。

答案 1 :(得分:1)

SELECT 
ISNULL(a.str_number,'') + ' ' + 
ISNULL(a.str_name,'') + ' ' + 
ISNULL(a.str_suffix,'') + ' ' + 
ISNULL(a.str_apt,'') 
AS addr 
FROM mytable

非常难看,但应该这样做。

答案 2 :(得分:0)

使用COALESCE:

select a.str_number+' '+a.str_name+' '+COALESCE(a.str_suffix, '')+' '+a.str_apt AS addr from mytable