我有这个简单的查询:
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替换为空格,但仍然没有值。
答案 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