
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

958

被折叠的 条评论
为什么被折叠?



