Подтвердить что ты не робот

DB2: не разрешит столбец "NULL"?

Часть сложного запроса, выполняемого нашим приложением, содержит строки: ... (внутренний запрос)

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

Этот синтаксис создания столбцов со значениями null не разрешен в DB2, хотя он полностью в порядке в MSSQL и Oracle. Технически я могу изменить его на:

'' as column_A,
'' as column_B, 

Но это не имеет точно такого же значения и может повредить наши результаты расчета. Как создать столбцы с нулевыми значениями в DB2 с использованием другого синтаксиса?

4b9b3361

Ответ 1

DB2 строго типизирована, поэтому вам нужно сообщить DB2, какой столбец имеет ваш NULL:

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

Ответ 2

Для 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