DB2:不会允许“NULL”列?

时间:2010-03-24 16:01:53

标签: sql db2

我们的应用运行的复杂查询的一部分包含以下行: ......(内部查询)

SELECT
...
NULL as column_A,
NULL as column_B,
...
FROM
...

在DB2中不允许使用 null 值创建列的语法,尽管在 MSSQL Oracle DB中完全没问题。 从技术上讲,我可以将其更改为:

'' as column_A,
'' as column_B, 

但这并没有完全相同的含义,可能会损害我们的计算结果。 如何使用其他语法在DB2中创建具有空值的列?

2 个答案:

答案 0 :(得分:45)

DB2是强类型的,因此您需要告诉DB2您的NULL是什么类型的列:

select 
   ...
   cast(NULL as int) as column_A,
   cast(NULL as varchar(128)) as column_B,
   ...
FROM
   ...

答案 1 :(得分:0)

对于Db2 LUW,从9.7版开始,您可以(如果愿意)使用NULL值,而无需将其显式转换为特定的数据类型。

NULL本身将隐式转换为VARCHAR(1)。该知识中心页面将显示在其他情况下会发生什么:Determining data types of untyped expressions

示例

db2 "describe values ( NULL, + NULL, NULL || NULL  )"

 Column Information

 Number of columns: 3

 SQL type              Type length  Column name                     Name length
 --------------------  -----------  ------------------------------  -----------
 449   VARCHAR                   1  1                                         1
 997   DECFLOAT                 16  2                                         1
 449   VARCHAR                 508  3                                         1

db2 "describe values NULL, 1"

 Column Information

 Number of columns: 1

 SQL type              Type length  Column name                     Name length
 --------------------  -----------  ------------------------------  -----------
 497   INTEGER                   4  1                                         1