我们的应用运行的复杂查询的一部分包含以下行: ......(内部查询)
SELECT
...
NULL as column_A,
NULL as column_B,
...
FROM
...
在DB2中不允许使用 null 值创建列的语法,尽管在 MSSQL 和 Oracle DB中完全没问题。 从技术上讲,我可以将其更改为:
'' as column_A,
'' as column_B,
但这并没有完全相同的含义,可能会损害我们的计算结果。 如何使用其他语法在DB2中创建具有空值的列?
答案 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