为什么用文本连接null是空的?

时间:2017-01-30 14:52:58

标签: sql postgresql null concatenation

为什么在sql中将null与字符串null连接起来的结果?它在内部如何运作?

如果将空值与某些文本的列连接起来,如下一行:

select '' || 'a' 

输出结果为:

  

输出='a'

但是,如果您将空值与文本连接起来,结果为null

select null || 'a'

输出结果为:

  

输出= NULL

所以,

  • 为什么我得不到相同的结果或收到错误?
  • 最终,它在内部如何运作?

4 个答案:

答案 0 :(得分:3)

null不是空字符串 - 它甚至都不是值。它缺乏。您可以将null视为"未知",缺失值。因此,用'a'来表示未知值的结果将是未知的 - 即null

答案 1 :(得分:2)

如果你需要在Postgres中连接空值,你应该使用 concat 函数。

根据Postgres文件:

  

concat(str" any" [,str" any" [,...]])

     

连接所有参数。忽略NULL参数。

select concat('Lady', 2, NULL, 'More');  

返回:

Lady2More

答案 2 :(得分:1)

NULL表示缺失值,它具有''的不同含义,其为空白,空白实际上具有值但是为空值,您不能说{{1有价值,它不存在。基于此,NULL的任何操作都将返回NULL

答案 3 :(得分:1)

NULL是非值,不存在的值。它不是零。它不是一个空字符串。值不能等于NULL。没有两个NULL值相等。

缺少缺席"数据"如果你必须给它一个含义。

NULL值通常被定义为未知或不适用的值,但即使这些定义也可以讨论。例如,记录可能不包括客户的出生日期,因为销售人员没有询问,或者因为客户不会提供,但客户仍然知道该日期,因此几乎不知道,也不适用。