SQL CAST字符串到十进制

时间:2015-12-15 15:03:05

标签: sql db2

  

SQL0802数据转换或数据映射错误

不是CAST的字段是小数。我试图CAST的字段是字符串。

我在此CAST表达式上尝试了不同的变体或CONVERTcase。我很确定这种语法是正确的。我仍然得到错误。

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

1 个答案:

答案 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按顺序处理,因此数字检查应在转换之前完成。