如果要在ABAP中使用Open SQL 需要注意使用符合其规则的语法,SQL过程中的变量都需要使用@来转义,以下为普通SQL 与 Open SQL 之间的语法转换,
SELECT MAX( MATNR )
INTO IT_TAB-MATNR
FROM MARA
WHERE MATNR LIKE LV_MATNR_01
SELECT MAX( MATNR )
FROM MARA
WHERE MATNR LIKE @LV_MATNR_01
INTO @DATA(GV_MATNR)
1、在ABAP中使用CONCAT函数,需要符合ABAP Open SQL的语法,包括ABAP中的变量要用@转义,列表中的元素必须使用逗号分隔,INTO放置在SQL的最后,CONCAT函数可以将获取值粘贴起来,可以定义粘贴字段的占长以及占位符。
2、实例:使用lpad函数将字段填充,并使用concat函数拼接。
SELECT CONCAT( CONCAT( CONCAT( MANDT, LPAD( CARRID,15,'# ' ) ),
LPAD( CARRNAME,15,'% ' ) ) ,
LPAD( CURRCODE,15,' ' ) ) AS LINE
FROM SCARR
INTO TABLE @DATA(RESULT).
1、在ABAP中使用LENGTH函数,需要符合ABAP Open SQL的语法,包括ABAP中的变量要用@转义,列表中的元素必须使用逗号分隔,INTO放置在SQL的最后,LENGTH函数可以将获取值的长度作为SELECT的条件。
2、实例:使用函数length获取字段CARRNAME长度大于9的数据,如下
SELECT MANDT ,CARRID, CARRNAME ,CURRCODE
FROM SCARR
WHERE LENGTH( CARRNAME ) > 9
INTO TABLE @DATA(RESULT).
1、在ABAP中使用LEFT与RIGHT函数,需要符合ABAP Open SQL的语法,包括ABAP中的变量要用@转义,列表中的元素必须使用逗号分隔,INTO放置在SQL的最后,LEFT函数可以截取字段值中从左侧开始的部分字符,而RIGHT函数是从右侧截取,在语法中可以定义截取的长度。
2、实例1:使用left函数获取名字的左边2位
SELECT left( carrname,2 ) AS left ,
mandt ,
carrid ,
currcode
FROM scarr
INTO TABLE @DATA(lt_scarr_left).
3、实例2:使用right函数获取名字的右边4位
SELECT right( carrname,4 ) AS right ,
mandt ,
carrid ,
currcode
FROM scarr
INTO TABLE @DATA(lt_scarr_right).
1、在ABAP中使用LOWER与UPPER函数,需要符合ABAP Open SQL的语法,包括ABAP中的变量要用@转义,列表中的元素必须使用逗号分隔,INTO放置在SQL的最后,LOWER与UPPER函数可以将获取的字段值转换成全部大写或全部小写。
2、实例1:使用lower函数将字段carrname全都转为小写。
SELECT lower( carrname ) AS lower ,
mandt ,
carrid ,
currcode
FROM scarr
INTO TABLE @DATA(lt_scarr_lower).
3、实例2:使用upper函数将字段carrname全都转为大写。
SELECT upper( carrname ) AS upper ,
mandt ,
carrid ,
currcode
FROM scarr
INTO TABLE @DATA(lt_scarr_upper)
1、在ABAP中使用LPAD及 RPAD 函数,需要符合ABAP Open SQL的语法规则,包括ABAP中的变量要用@转义,表中的字段必须使用逗号分隔,INTO放置在SQL的最后等,LPAD与 RPAD 函数可以在Select中为获取的字段值填充指定的字符串,在ABAP中的语法格式分别为LPAD( arg, len, src );RPAD( arg, len, src ) ,三个参数分别指定了操作字段;填充后值的长度;填充字符.
2、实例1:使用函数lpad函数将字段carrname左边填充字符**&**,字符长度到18:
SELECT lpad( carrname , 18 , '&' ) AS carrname ,
mandt ,
carrid ,
currcode
FROM scarr
INTO TABLE @DATA(lt_scarr_lpad).
3、实例2:使用函数rpad函数将字段carrname右边填充字符**&**,字符长度到15:
SELECT rpad( carrname , 15 , '!' ) AS carrname ,
mandt ,
carrid ,
currcode
FROM scarr
INTO TABLE @DATA(lt_scarr_rpad).
1、在ABAP中使用LTRIM与 RTRIM 函数,需要符合ABAP Open SQL的语法规则,包括ABAP中的变量要用@转义,表中的字段必须使用逗号分隔,INTO放置在SQL的最后等,LTRIM与 RTRIM 函数可以在Select中为获取的字段值去除指定的字符串,在ABAP中的语法格式分别为LTRIM( arg, char );RTRIM( arg, char ) ,两个参数分别指定了操作字段和去除字符。
2、实例1:使用ltrim函数去除字符carrname字段左边的X字符。
SELECT ltrim( carrname , 'x' ) AS carrname ,
mandt ,
carrid ,
currcode
FROM scarr
INTO TABLE @DATA(lt_scarr_ltrim).
3、实例2:使用rtrim函数去除字符carrname字段右边的X字符。
SELECT rtrim( carrname , 'x' ) AS carrname ,
mandt ,
carrid ,
currcode
FROM scarr
INTO TABLE @DATA(lt_scarr_rtrim).
1、在ABAP中使用REPLACE函数,需要符合ABAP Open SQL的语法规则,包括ABAP中的变量要用@转义,表中的字段必须使用逗号分隔,INTO放置在SQL的最后等,L REPLACE函数可以在Select中为替换值中的某段字符串,在ABAP中的语法格式为REPLACE( arg1, arg2, arg3 ) , 其意为用arg3替换arg1中出现的所有arg2 。
2、实例1:使用函数replace函数将carrname字段中的px转换为yy。
SELECT replace( carrname , 'px' , 'yy' ) AS carrname ,
mandt ,
carrid ,
currcode
FROM scarr
INTO TABLE @DATA(lt_scarr_replace).
1、在ABAP中使用SUBSTRING函数,需要符合ABAP Open SQL的语法规则,包括ABAP中的变量要用@转义,表中的字段必须使用逗号分隔,INTO放置在SQL的最后等,SUBSTRING函数可以在Select中截取字段值中任意位置任意长度的字符串,在ABAP中的语法格式为SUBSTRING( arg, pos, len ) , 其意为从pos位开始截取arg的len位字符 。
2、实例1:使用substring函数截取carrname字段从第4位开始5个长度。
SELECT substring( carrname , 4 , 5 ) AS carrname ,
mandt ,
carrid ,
currcode
FROM scarr
WHERE carrid <> ''
INTO TABLE @DATA(lt_scarr_sub).
*注意:所有函数均可配合使用