MSSQL Server 处理Null

Null,在T-SQL中是个很诡异的内容,它的处理方式不按常规来走,以至于我们在处理数据的时候,经常会变的手足无措,这里讨论下,null与字符类型拼接的情况。

以下语句:

SELECT custid, country, region, city,
  country + N',' + region + N',' + city AS location
FROM Sales.Customers;
 

执行结果:

custid      country         region city            location
----------- --------------- ------ --------------- -------------------
1           Germany         NULL   Berlin          NULL
2           Mexico          NULL   México D.F.     NULL
3           Mexico          NULL   México D.F.     NULL
4           UK              NULL   London          NULL
5           Sweden          NULL   Luleå           NULL
6           Germany         NULL   Mannheim        NULL
7           France          NULL   Strasbourg      NULL
8           Spain           NULL   Madrid          NULL
9           France          NULL   Marseille       NULL
10          Canada          BC     Tsawassen       Canada,BC,Tsawassen
11          UK              NULL   London          NULL
12          Argentina       NULL   Buenos Aires    NULL
13          Mexico          NULL   México D.F.     NULL
14          Switzerland     NULL   Bern            NULL
15          Brazil          SP     Sao Paulo       Brazil,SP,Sao Paulo
16          UK              NULL   London          NULL
17          Germany         NULL   Aachen          NULL
18          France          NULL   Nantes          NULL
19          UK              NULL   London          NULL
20          Austria         NULL   Graz            NULL
...

(91 row(s) affected)


location列很多为null这是因为country + N',' + region + N',' + city中的三个字段很多是null,此时如果我们希望值为null的列直接忽略,而不是将整个表达式赋值为null。

可做如下处理:

SET CONCAT_NULL_YIELDS_NULL OFF;
SELECT custid, country, region, city,
  country + N',' + region + N',' + city AS location
FROM Sales.Customers;


执行结果:

custid      country         region city            location
----------- --------------- ------ --------------- -------------------
1           Germany         NULL   Berlin          Germany,,Berlin
2           Mexico          NULL   México D.F.     Mexico,,México D.F.
3           Mexico          NULL   México D.F.     Mexico,,México D.F.
4           UK              NULL   London          UK,,London
5           Sweden          NULL   Luleå           Sweden,,Luleå
6           Germany         NULL   Mannheim        Germany,,Mannheim
7           France          NULL   Strasbourg      France,,Strasbourg
8           Spain           NULL   Madrid          Spain,,Madrid
9           France          NULL   Marseille       France,,Marseille
10          Canada          BC     Tsawassen       Canada,BC,Tsawassen
11          UK              NULL   London          UK,,London
12          Argentina       NULL   Buenos Aires    Argentina,,Buenos Aires
13          Mexico          NULL   México D.F.     Mexico,,México D.F.
14          Switzerland     NULL   Bern            Switzerland,,Bern
15          Brazil          SP     Sao Paulo       Brazil,SP,Sao Paulo
16          UK              NULL   London          UK,,London
17          Germany         NULL   Aachen          Germany,,Aachen
18          France          NULL   Nantes          France,,Nantes
19          UK              NULL   London          UK,,London
20          Austria         NULL   Graz            Austria,,Graz
...

(91 row(s) affected)



 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值