我正在浏览SQL null值并且有一个查询
select sysdate, 1+5, 'ABC', 'ABC'||null from dual
返回值
SYSDATE 1+5 'AB 'AB
--------- ---- --- ---
10-OCT-15 6 ABC ABC
请让我知道为什么标题列被修剪为'AB以及为什么空列的值为ABC。感谢。
答案 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。