工作笔记之 SELECT 语句在 SAP ABAP 中的用法总结(下)(2)

简介: 在上一篇文章中,我们介绍了 ABAP 的查询语句关键的三个部分:1.SELECT result 部分2.FROM source 部分3.INTO target 部分

字符串匹配

LIKE 运算符可以有助于更好的从表里获取数据,只使用搜索部分字符,用法如下:LIKE 'XXX_'.


其中 XXX 代表我们正在寻找的单词的一部分,而 _ 下划线就代表任何其他的符号集,可以表示任何字母。比如想寻找以 L 结尾的 carrid 信息,就可以使用如下的代码:

SELECT mandt carrid connid fldate
  FROM sflight
  INTO CORRESPONDING FIELDS OF TABLE gt_out
  WHERE carrid LIKE '_L'.

最后查询的结果就会包括以 L 结尾的航线代码的相关信息,此处包括 DLJL

image.png

当使用 LIKE 时,我们必须有字符作为一个值。然而,如果我们想使用非字符格式,我们可以尝试使用 CAST


sflight 表中,我们有 CONNID,例如,它不是字符类型。

image.png

但是我们也想同样使用类似字符匹配的功能,就可以使用 CAST:

SELECT mandt, carrid, connid, fldate
  FROM sflight
  WHERE CAST( connid AS CHAR ) LIKE '19__'
  INTO CORRESPONDING FIELDS OF TABLE @gt_out.

比如上面的代码中,就想要找到以数字 19 开头的 connid 信息,查询结果如下:

image.png


这里有几个变化需要注意,首先:

  1. 需要用逗号将字段隔开,不然有如下报错:

image.png

  1. INTO 或者 APPENDING 需要放到查询语句的最后,不然又如下报错:

image.png

  1. 需要给内表加上 @ 符号,这个方式是 ABAP 7.4 SP05 以上版本提供的内联定义:

image.png

IN 条件运算符

IN 运算符用于在 SELECT 查询中创建一个范围,比如我们可以用括号包裹起来,在这个范围的结果都可以被查询出来,比如找出 carrid 为 AA、DL、LH 的信息:

SELECT carrid connid FROM sflight
  INTO CORRESPONDING FIELDS OF TABLE gt_out
    WHERE carrid IN ('AA', 'DL', 'LH').

除了在表中的字段,IN 还可以来使用选择屏幕中的范围,部分用法如下:

INTO CORRESPONDING FIELDS OF TABLE gt_out 
  WHERE a~vbeln IN so_vbeln
    AND a~posnr IN so_posnr
    AND b~erdat IN so_erdat.

更高级 IN 用法是使用范围表,四个字段:

  • SIGN
  • OPTION
  • LOW
  • HIGH

image.png

WHERE 中的动态 SELECT 查询

如果我们不知道我们在 WHERE 条件中需要什么字段,我们可以使用动态的 WHERE 条件,通过在运行时决定哪个字段被添加到 WHERE 条件中。

" 设定条件语句的格式为:gv_field = gv_value
DATA gv_where TYPE c LENGTH 100.
DATA gv_field TYPE c LENGTH 50 VALUE 'carrid'.
DATA gv_operator TYPE C LENGTH 10 VALUE 'EQ'.
DATA gv_value TYPE c LENGTH 50 VALUE '''LH'''.
CONCATENATE gv_field gv_operator gv_value INTO gv_where SEPARATED BY space.
" 查询数据,动态传入条件语句
SELECT mandt carrid connid
  FROM sflight
  INTO CORRESPONDING FIELDS OF TABLE gt_out
  WHERE (gv_where).

统一能获取结果:

image.png

SINGLE FOR UPDATE

FOR UPDATE 语句可以用来为选定的行设置一个独占锁。然而,如果我们有一个以上的条目具有相同的主键,结果集将是空的。因此,指定全部的主键真的很重要。


此外,当我们的 FOR UPDATE 语句导致死锁时,将引发一个异常,SELECT 语句绕过 SAP 缓冲也很重要。

  SELECT SINGLE FOR UPDATE carrid connid 
    FROM sflight
    INTO CORRESPONDING FIELDS OF TABLE gs_out
    WHERE carrid EQ 'AA'.


GROUP BY

GROUP BY 用于分组查询,如分组求和的查询。

SELECT carrid connid
  FROM sflight
  INTO CORRESPONDING FIELDS OF TABLE gt_sflight
  GROUP BY carrid connid.


GOURP BY 可以配合使用 AVG 平均值、COUNT 计数、MAX/MIN 取最大值/最小值、SUM 取和计算、STDDEV 取标准差等聚合方法进行查询分组计算。


HAVING 后的条件语句用于限制,在使用 GROUP BY 确定分组条件的语句。

相关文章
|
1月前
|
数据处理 开发者
ABAP AT NEW 关键字的用法
ABAP AT NEW 关键字的用法
29 0
|
1月前
|
存储
使用 ABAP 代码打印出 SAP CRM 系统里所有维护了 Sales Area 的 business partner id
使用 ABAP 代码打印出 SAP CRM 系统里所有维护了 Sales Area 的 business partner id
21 0
|
1月前
关于 SAP ABAP OData 服务如何实现 Deep Insert 场景 - SAP 应用的标准行为试读版
关于 SAP ABAP OData 服务如何实现 Deep Insert 场景 - SAP 应用的标准行为试读版
16 1
|
1月前
|
人工智能
Suno AI 生成 SAP ABAP 顾问之歌
Suno AI 生成 SAP ABAP 顾问之歌
23 1
|
1月前
|
存储 安全 数据库
SAP ABAP 中数据类型 xstring 的使用介绍
SAP ABAP 中数据类型 xstring 的使用介绍
31 0
|
1月前
什么是 SAP ABAP 里的 Subscreen
什么是 SAP ABAP 里的 Subscreen
16 1
什么是 SAP ABAP 里的 Subscreen
|
1月前
|
前端开发 开发工具 Android开发
小技巧分享 - 使用 Visual Studio Code 查看和修改 ABAP 代码试读版
小技巧分享 - 使用 Visual Studio Code 查看和修改 ABAP 代码试读版
16 0
小技巧分享 - 使用 Visual Studio Code 查看和修改 ABAP 代码试读版
|
1月前
|
开发者 供应链 BI
SAP ABAP CALL SUBSCREEN 代码解析
SAP ABAP CALL SUBSCREEN 代码解析
61 0
|
1月前
|
BI
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示
22 0
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示
|
2月前
|
存储 数据处理 开发者
ABAP 如何把 unicode 代码点转换成字符
ABAP 如何把 unicode 代码点转换成字符
21 0

热门文章

最新文章