SQL列标题为NUll

时间:2015-10-10 18:46:57

标签: sql oracle

我正在浏览SQL null值并且有一个查询

select sysdate, 1+5, 'ABC', 'ABC'||null from dual

返回值

SYSDATE          1+5  'AB   'AB
---------       ----  ---   ---
10-OCT-15         6   ABC   ABC

请让我知道为什么标题列被修剪为'AB以及为什么空列的值为ABC。感谢。

2 个答案:

答案 0 :(得分:0)

我无法重现您的行为:

<强> SqlFiddleDemo

select sysdate, 1+5, 'ABC', 'ABC'||null
from dual;

结果:

╔════════════════════════════╦══════╦════════╦═════════════╗
║          SYSDATE           ║ 1+5  ║ 'ABC'  ║ 'ABC'||NULL ║
╠════════════════════════════╬══════╬════════╬═════════════╣
║ October, 10 2015 18:49:55  ║   6  ║ ABC    ║ ABC         ║
╚════════════════════════════╩══════╩════════╩═════════════╝

但是你真的应该像你的计算列一样:

select 
  sysdate      AS current_date_time,
  1+5          AS addition,
  'ABC'        AS my_string,
  'ABC'||null  AS my_string2
from dual;

答案 1 :(得分:0)

标题(如果未手动指定)从数据类型解析。如果仅使用文字,Oracle会从中确定类型。在您的情况下,输出是:

NUMBER,VARCHAR2(3),VARCHAR2(3)

因此SQL * Plus使用A3的标题,其余部分被截断。

连接运算符与其他运算符的行为不同,值为|| NULL结果为value,而不是NULL。在其他RDBMS中,像SQL Server +一样用于连接字符串,并且有一个选项来设置它的行为,因此它可能同时是值和NULL。