DB2 SQLCODE = -420,将 smallint 字段与空值进行比较时出错
DB2 SQLCODE = -420, ERROR when comparing smallint fields with nulls
我正在尝试比较两个 smallint 字段以查找差异。一个 table 是待处理的更改 table,它在夜间由批处理作业读取,然后在执行其他活动时更新另一个 table。批处理作业有一些问题,我正在研究这些问题。我想找到那些不同的值,并显示发生这种情况时待处理的 table 的值。
给我带来麻烦的特定列 (CO_FT_FREQ_DAY) 在 smallint 字段中有空值,我认为这是我遇到问题的原因。 (或者它可能是一个挂起的添加,所以没有匹配的值可以比较...)正如你所看到的,我已经尝试解决这个问题,但它仍然没有用。
我之前试过 ifnull,但得到了同样的错误。我希望这能解决问题。
SELECT T342.clientID
,T342.TS_340
,case when (case when t342.CO_FT_FREQ_DAY is null then 0 else
t342.CO_FT_FREQ_DAY end) <>
(case when t340.CO_FT_FREQ_DAY is null then 0 else
t340.CO_FT_FREQ_DAY end)
then T342.CO_FT_FREQ_DAY
else 0
end as CO_FT_FREQ_DAY
FROM database.PendingChangeTable T342
left outer join database.CurrentTable T340
on T340.ClientID = T342.ClientID
and T340.TS_PK = T342.TS_340
WHERE t342.clientID in (clientID list);
DSNT408I SQLCODE = -420,错误:字符串参数的值不是
接受去浮动函数
DSNT418I SQLSTATE = 22018 SQLSTATE RETURN 代码
UGH 发现问题了。设计 table 的人在中途切换并将这些新列定义为 char 字段,我错过了。所以我需要在我的 case 语句中将值设置为“0”而不是 0。
,case when (case when t342.CO_FT_FREQ_DAY is null then '0' else
t342.CO_FT_FREQ_DAY end) <>
(case when t340.CO_FT_FREQ_DAY is null then '0' else
t340.CO_FT_FREQ_DAY end)
then T342.CO_FT_FREQ_DAY
else '0'
end as CO_FT_FREQ_DAY
,case when ifnull(t342.CO_HT_FREQ_DAY,'0') <>
ifnull(t342.CO_HT_FREQ_DAY,'0')
then ifnull(T340.CO_HT_FREQ_DAY,'0')
else '0'
end as CO_HT_FREQ_DAY
所以今天给我的教训是,当你遇到这个错误时,一定要检查你的数据类型!
我正在尝试比较两个 smallint 字段以查找差异。一个 table 是待处理的更改 table,它在夜间由批处理作业读取,然后在执行其他活动时更新另一个 table。批处理作业有一些问题,我正在研究这些问题。我想找到那些不同的值,并显示发生这种情况时待处理的 table 的值。
给我带来麻烦的特定列 (CO_FT_FREQ_DAY) 在 smallint 字段中有空值,我认为这是我遇到问题的原因。 (或者它可能是一个挂起的添加,所以没有匹配的值可以比较...)正如你所看到的,我已经尝试解决这个问题,但它仍然没有用。
我之前试过 ifnull,但得到了同样的错误。我希望这能解决问题。
SELECT T342.clientID
,T342.TS_340
,case when (case when t342.CO_FT_FREQ_DAY is null then 0 else
t342.CO_FT_FREQ_DAY end) <>
(case when t340.CO_FT_FREQ_DAY is null then 0 else
t340.CO_FT_FREQ_DAY end)
then T342.CO_FT_FREQ_DAY
else 0
end as CO_FT_FREQ_DAY
FROM database.PendingChangeTable T342
left outer join database.CurrentTable T340
on T340.ClientID = T342.ClientID
and T340.TS_PK = T342.TS_340
WHERE t342.clientID in (clientID list);
DSNT408I SQLCODE = -420,错误:字符串参数的值不是
接受去浮动函数
DSNT418I SQLSTATE = 22018 SQLSTATE RETURN 代码
UGH 发现问题了。设计 table 的人在中途切换并将这些新列定义为 char 字段,我错过了。所以我需要在我的 case 语句中将值设置为“0”而不是 0。
,case when (case when t342.CO_FT_FREQ_DAY is null then '0' else
t342.CO_FT_FREQ_DAY end) <>
(case when t340.CO_FT_FREQ_DAY is null then '0' else
t340.CO_FT_FREQ_DAY end)
then T342.CO_FT_FREQ_DAY
else '0'
end as CO_FT_FREQ_DAY
,case when ifnull(t342.CO_HT_FREQ_DAY,'0') <>
ifnull(t342.CO_HT_FREQ_DAY,'0')
then ifnull(T340.CO_HT_FREQ_DAY,'0')
else '0'
end as CO_HT_FREQ_DAY
所以今天给我的教训是,当你遇到这个错误时,一定要检查你的数据类型!