web-dev-qa-db-ja.com

DB2:「NULL」列を許可しませんか?

アプリが実行している複雑なクエリの一部には、次の行が含まれています:...(内部クエリ)

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

null値で列を作成するこの構文は、DB2では許可されていませんが、[〜#〜] mssql [〜#〜]およびOracle DB。技術的には、次のように変更できます。

'' as column_A,
'' as column_B, 

しかし、これはまったく同じ意味ではなく、計算結果を損なう可能性があります。他の構文を使用してDB2でnull値の列を作成するにはどうすればよいですか?

26
GyRo

DB2は強く型付けされているため、NULLがどの種類の列であるかをDB2に伝える必要があります。

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

Db2 LUWの場合、バージョン9.7以降、(必要に応じて)特定のデータ型に明示的にキャストせずにNULL値を使用できます。

NULL自体は、暗黙的にVARCHAR(1)にキャストされます。このナレッジセンターのページでは、他の場合に何が起こるかを示します。 型指定されていない式のデータ型の決定

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
0
Paul Vernon