【ABAP小技巧】+AS TEXT排序

 

WERKS WERKS_S ZZWORK_LINE 排序,按理来说,应该是“信息软件-信-X”排在“深圳-深-S”的后面,但是为什么深圳排到了信息软件后面呢?

是SAP内部编码的问题

解决方法:

使用AS TEXT排序

在 ABAP 的 SORT 语句中,如果不指定其他参数(如 AS TEXT 或指定语言环境),排序默认使用的是二进制内码顺序(即字符在系统代码页中的字节值),对于中文字符通常是根据其 Unicode 或 GB2312/GBK 编码的十六进制值决定先后。

具体到案例中的两个值:

“信息AKKK线”

“深圳IC号深圳线路”

在 ABAP 非文本模式排序(默认)时:
比较的是每个字符在内表中的二进制编码值。
假设系统是 Unicode 系统(SAP NetWeaver 7.0+ 通常使用 UTF-16 或代码页 4103):

“深”的 Unicode 码点:U+6DF1(十六进制 0x6DF1)

“信”的 Unicode 码点:U+4FE1(十六进制 0x4FE1)

比较 0x4FE1(信)与 0x6DF1(深):
0x4FE1 < 0x6DF1,因此 “信息...” 排在 “深圳...” 前面。

如何验证或改变顺序?

不区分语言、按二进制(默认)SORT gt_out BY werks zls werks_s zzwork_line.*

若希望按拼音排序(中文环境)SORT gt_out BY werks zls werks_s zzwork_line AS TEXT.

注意:用 AS TEXT 后会按当前登录语言的排序规则(中文环境通常是拼音,但需在系统支持的语言环境中运行)。

BY LilySesy D20260811

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值