SQL0802数据转换或数据映射错误
不是CAST
的字段是小数。我试图CAST
的字段是字符串。
我在此CAST
表达式上尝试了不同的变体或CONVERT
和case
。我很确定这种语法是正确的。我仍然得到错误。
CASE WHEN cpssn=amssn THEN amfnam||amlnam
WHEN cpssn=CAST(maassn as DECIMAL(9)) THEN maafnm||maalnm
WHEN cpssn=CAST(mpssno as DECIMAL(9)) THEN mppfnm||mpplnm
END as Name
答案 0 :(得分:0)
一种暴力方法使用translate()
:
(CASE WHEN cpssn = amssn THEN amfnam||amlnam
WHEN length(translate(massn, 'a0123456789', 'a')) > 0 THEN NULL
WHEN length(translate(mpssno, 'a0123456789', 'a')) > 0 THEN NULL
WHEN cpssn = CAST(maassn as DECIMAL(9)) THEN maafnm||maalnm
WHEN cpssn = CAST(mpssno as DECIMAL(9)) THEN mppfnm||mpplnm
END) as Name
注意:我对DB2中的translate()
并不熟悉。上面使用Oracle约定来删除字符,因为第三个参数在Oracle中不能是''
。它应该仍然可以在DB2中使用。
这应该首先保证字符串中的唯一字符是数字。 case
按顺序处理,因此数字检查应在转换之前完成。