ABAP SQL拼接两列时如何保留尾随空格?
ABAP SQL拼接保留尾随空格的解决方案
问题背景
查询的表中存在带尾随空格的拼接主键,比如BUKRS(4) = 'XYZ '与WERKS(4) = 'ABCD'拼接后应为XYZ ABCD,但在ABAP SQL中使用RPAD填充尾随空格时,结果会自动截断空格,导致拼接结果变为XYZABCD,无法匹配目标表的主键。且LPAD可正常保留前导空格,只有尾随空格被截断。
可行解决方案
通过将CHAR类型字段显式转换为STRING类型,避免尾随空格被自动截断,修改后的SQL语句如下:
SELECT CONCAT( RPAD( CAST( tvko~bukrs AS STRING ), 4, ' ' ), CAST( t001w~werks AS STRING ) ) AS key, datab, datbi FROM t001w INNER JOIN tvko ON tvko~vkorg = t001w~vkorg LEFT JOIN ztab ON ztab~key = CONCAT( RPAD( CAST( tvko~bukrs AS STRING ), 4, ' ' ), CAST( t001w~werks AS STRING ) )
原理
ABAP SQL中,CHAR类型字段的尾随空格会被默认截断,而STRING类型会完整保留所有空格(包括尾随空格)。通过CAST(... AS STRING)转换字段类型后,RPAD填充的尾随空格就能被保留,最终得到符合预期的拼接主键。
补充说明
如果使用的是SAP HANA数据库,也可以尝试字符串反转后用LPAD处理再反转回来,但显式转换为STRING的方法兼容性更强,适用于多数ABAP SQL支持的数据库环境。
内容的提问来源于stack exchange,提问作者Zero
相关产品推荐
相关产品推荐

