Я подозреваю, что вы используете DB2 для z / OS или DB2 для i.Если так, я подозреваю, что это не понравится нетипизированный NULL
.Тренировка Db2 LUW должна быть ДАТА.например,
db2 "CREATE TABLE TEST(AHINVD CHAR(8), CMDDCD CHAR(6), AHDUED CHAR(8))"
db2 "describe
SELECT
case
when date(to_date(RTRIM(AHINVD),'YYYYMMDD')) + cast(CMDDCD as INT) days = date(to_date(RTRIM(AHDUED),'YYYYMMDD')) then NULL
else date(to_date(RTRIM(AHINVD),'YYYYMMDD')) + cast(CMDDCD as INT) days
end
FROM TEST"
Column Information
Number of columns: 1
SQL type Type length Column name Name length
-------------------- ----------- ------------------------------ -----------
385 DATE 10 1 1
, но, например, это
SELECT
case
when date(to_date(RTRIM(AHINVD),'YYYYMMDD')) + cast(CMDDCD as INT) days = date(to_date(RTRIM(AHDUED),'YYYYMMDD')) then CAST(NULL AS DOUBLE)
else date(to_date(RTRIM(AHINVD),'YYYYMMDD')) + cast(CMDDCD as INT) days
end
FROM TEST
возвращает
The data types of the result-expressions of a CASE expression or DECODE function are not compatible.. SQLCODE=-581, SQLSTATE=42804
То, что я предполагаю, похоже на ваше сообщение Db2 для z / OS
Возможно, поскольку NULL - это то, что вы получаете, если у вас нет ELSE
, почему бы просто не кодировать это?
SELECT
case
when date(to_date(RTRIM(AHINVD),'YYYYMMDD')) + cast(CMDDCD as INT) days
<> date(to_date(RTRIM(AHDUED),'YYYYMMDD'))
then date(to_date(RTRIM(AHINVD),'YYYYMMDD')) + cast(CMDDCD as INT) days
end
FROM TEST