如何在SQL连接条件中使用子字符串函数?

2020-08-15 22:01发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我想写一个连接cosp_bak和csks表的SQL。 连接条件是cosp_bak的objnr的最后12位数字等于csks的kostl。 所以我写了一个SQL

从左侧的csk中选择csks〜kostl,cosp_bak〜kstar到@data(t_result)中,并在csks〜kostl = cosp_bak〜objnr + 10(12)上加入cosp_bak。

它有错误

未知的列名称" OBJNR + 10(12)"。 直到运行时,您才能指定字段列表。

那么在SQL条件下使用函数的正确方法是什么?

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我想写一个连接cosp_bak和csks表的SQL。 连接条件是cosp_bak的objnr的最后12位数字等于csks的kostl。 所以我写了一个SQL

从左侧的csk中选择csks〜kostl,cosp_bak〜kstar到@data(t_result)中,并在csks〜kostl = cosp_bak〜objnr + 10(12)上加入cosp_bak。

它有错误

未知的列名称" OBJNR + 10(12)"。 直到运行时,您才能指定字段列表。

那么在SQL条件下使用函数的正确方法是什么?

付费偷看设置
发送
6条回答
落灬小鱼
1楼-- · 2020-08-15 22:42

您可以直接从csks表本身使用objnr。

从csks〜objnr = cosp_bak〜objnr上的csks leftjoin cosp_bak的csksleftjoin中选择csks〜kostl,cosp_bak〜kstar into @ data(t_result)。

CSKS表存储相同的对象号

spaceman01
2楼-- · 2020-08-15 22:45

好。 看起来像

在SUBSTRING上左移cosp_bak(cosp_bak〜objnr,12,10)= csks〜kostl 

工作。 有人可以告诉我为什么吗?

hongfeng1314
3楼-- · 2020-08-15 22:55

你好 ricky luo

OBJNR + 10(12)是一种ABAP语法,表示" 前10个字符后为12个字符"。 其中 SUBSTRING (cosp_bak〜objnr,12,10)是一个SQL函数, DB可以理解和执行,并且在您的示例中,它的意思是" 后12个字符后为10个字符"。

由于KOSTL是10个字符的字段,因此我求出12个字符之间的区别

此外,COSP_BAK并不是真正的ABAP变量,因此JOIN仅发生在DB端(至少在这种情况下),因此SQL SUBSTRING

亲切的问候,

Mateusz

huskylover
4楼-- · 2020-08-15 22:44

因为在数据库上评估了SUBSTRING(),并且dobj + 即使在OpenSQL中,offset(length)也不是SQL的正确语法。

四川大学会员
5楼-- · 2020-08-15 22:55

这确实是一个好主意,因为联接条件中的子字符串操作会阻止数据库优化器应用 加入之前的条件。 同样,大多数索引也根本无法使用这种子字符串操作。

Alawn_Xu
6楼-- · 2020-08-15 22:50

ABAP文档中有关dataobject + offset(length)的更多信息:子字符串访问

一周热门 更多>