字符串匹配
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 结尾的航线代码的相关信息,此处包括 DL
和 JL
:
当使用 LIKE 时,我们必须有字符作为一个值。然而,如果我们想使用非字符格式,我们可以尝试使用 CAST
。
在 sflight
表中,我们有 CONNID
,例如,它不是字符类型。
但是我们也想同样使用类似字符匹配的功能,就可以使用 CAST
:
SELECT mandt, carrid, connid, fldate FROM sflight WHERE CAST( connid AS CHAR ) LIKE '19__' INTO CORRESPONDING FIELDS OF TABLE @gt_out.
比如上面的代码中,就想要找到以数字 19 开头的 connid 信息,查询结果如下:
这里有几个变化需要注意,首先:
- 需要用逗号将字段隔开,不然有如下报错:
- INTO 或者 APPENDING 需要放到查询语句的最后,不然又如下报错:
- 需要给内表加上
@
符号,这个方式是 ABAP 7.4 SP05 以上版本提供的内联定义:
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
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).
统一能获取结果:
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
确定分组条件的语句。