【ABAP】opensql case 语法错误

在使用case对金额字段进行操作时报错

The maximum possible number of places in the expression starting with DMBTR is 34 places with 2 decimal places. There can be, however, no more than 31 places and 14 decimal places.

SELECT CASE bsad~shkzg WHEN 'H' THEN -1 * bsad~dmbtr ELSE bsad~dmbtr END AS dmbtr,
       CASE bsad~shkzg WHEN 'H' THEN -1 * bsad~dmbe2 ELSE bsad~dmbe2 END AS dmbe2
FROM bsad
INTO TABLE @DATA(lt_bsad).

 

解决办法

1.需要使用cast进行类型转换

SELECT CASE bsad~shkzg WHEN 'H' THEN ( CAST( bsad~dmbtr * -1  AS CURR( 23,2 ) ) ) ELSE bsad~dmbtr END AS dmbtr,
       CASE bsad~shkzg WHEN 'H' THEN ( CAST( bsad~dmbe2 * -1  AS CURR( 23,2 ) ) ) ELSE bsad~dmbe2 END AS dmbe2
INTO TABLE @DATA(lt_bsad)
FROM bsad.

 也可以

SELECT CASE bsad~shkzg WHEN 'H' THEN - bsad~dmbtr ELSE bsad~dmbtr END AS dmbtr,
       CASE bsad~shkzg WHEN 'H' THEN - bsad~dmbe2 ELSE bsad~dmbe2 END AS dmbe2
INTO TABLE @DATA(lt_bsad)
FROM bsad.

 

 
posted @ 2023-06-06 11:38  LingC_C  阅读(568)  评论(0)    收藏  举报