ABAP--新语法--Open SQL--第二天-- Built-In Functions内置方法

Built-In Functions

Built-In Functions(Num)

在 SELECT LIST 使用内嵌表达式来处理数值,使用时需注意传入参数的类型

 常见的数值表达式如下:
ABS:获取绝对值
CEIL:向上取整
FLOOR:向下取整
DIV:除法计算,取整数位
DIVISION:除法计算,保留 N 位小数
MOD:除法计算,取余数
ROUND:计算舍入值

DATA(lv_dec) = CONV zdec_3_demo( '-123.456' ).

SELECT SINGLE
       @lv_dec AS original,
       abs( @lv_dec ) AS abs,
       ceil( @lv_dec ) AS ceil,
       floor( @lv_dec ) AS floor,
       div( -4 , -3 ) AS div,
       division( -4 , -3 , 2 ) AS division,
       mod( -4 , -3 ) AS mod,
       round( @lv_dec , 2 ) AS round_po,
       round( @lv_dec , -2 ) AS round_ne
  FROM sflight
  INTO @DATA(lwa_data). 

在这里插入图片描述
Built-In Functions(String)

在 SELECT LIST 使用内嵌表达式来处理字符串, 通常情况下字符串返回结果不能超过255个字符,如果字符长度异常,语法检查时会有错误提示

 CONCAT:连接字符串,参数固定为2个,各个表达式之间可以嵌套使用,CONCAT内部也可以使用 &&
 &&:连接字符串,参数没有个数限制,但不能将其他内嵌表达式当作参数使用,仅作为操作符使用,在非SELECT语句中也可以被使用
 CONCAT_WITH_SPACE:连接字符串,并用 N 个空格分隔,该表达式结果不能超过1333个字符
 INSTR:遍历字符串,查找指定字符 s1 并返回第一次出现的位置,没有查到则返回0
 LEFT/RIGHT:从字符串左/右侧开始取出 N 位字符,忽略前导/尾部的空格
 LENGTH:计算字符串长度

SELECT concat( carrid , currcode ) AS concat,
       carrid && currcode AS concat_sign,
       concat_with_space( carrid , currcode , 1 ) AS with_space,
       instr( carrid , 'BA' ) AS instr,
       left( carrname , 4 ) AS left,
       right( carrname , 4 ) AS right,
       length( carrname ) AS length
  FROM scarr
  INTO TABLE @DATA(lt_data)
    UP TO 5 ROWS. 

在这里插入图片描述
Built-In Functions(Date/Time)

在 SELECT LIST 使用内嵌表达式来处理日期/时间

 DATS_IS_VALID/TIMS_IS_VALID:校验日期/时间有效性,有效时返回 1,否则返回 0
 DATS_DAYS_BETWEEN:计算日期d1和d2相隔的天数
 DATS_ADD_DAYS:为指定日期加上N天
 DATS_ADD_MONTHS:为指定日期加上N月

DATA(lv_date) = CONV datum( '20181022' ). 

SELECT fldate AS original_date,
       dats_is_valid( fldate ) AS valid_date,
       tims_is_valid( @sy-uzeit ) AS valid_time, 
       dats_days_between( fldate , @lv_date ) AS between,
       dats_add_days( fldate , 10 ) AS add_days,
       dats_add_months( fldate , 3 ) AS add_months
  FROM sflight
  INTO TABLE @DATA(lt_data)
    UP TO 3 ROWS.

在这里插入图片描述
Built-In Functions(Time Stamp)

在 SELECT LIST 使用内嵌表达式来处理时间戳

 TSTMP_IS_VALID:校验时间戳有效性,有效时返回 1,否则返回 0
 TSTMP_CURRENT_UTCTIMESTAMP:返回当前时间戳
 TSTMP_SECONDS_BETWEEN:计算时间戳 t1 和 t2 相隔的秒数,需要用赋值语句进行传参,可以添加相应的错误处理
 TSTMP_ADD_SECONDS:为指定时间戳加上 N 秒,N 必须为 timestamp 类型

DATA(lv_stamp_now) = CONV timestamp( '20190603133559' ).
DATA(lv_stamp_past) = CONV timestamp( '20190602161408' ).

SELECT tstmp_is_valid( @lv_stamp_now ) AS valid_stamp,
       tstmp_current_utctimestamp( ) AS current_stamp,
       tstmp_seconds_between( tstmp1 = @lv_stamp_past,
                              tstmp2 = @lv_stamp_now,
                              on_error = @sql_tstmp_seconds_between=>set_to_null ) AS between,
       tstmp_add_seconds( tstmp = @lv_stamp_now,
                          seconds = @( CONV timestamp( 999 ) ),
                          on_error = @sql_tstmp_add_seconds=>set_to_null ) AS add_second
  FROM sflight
  INTO TABLE @DATA(lt_data)
    UP TO 1 ROWS.

在这里插入图片描述
Built-In Functions(Time Zone)

在 SELECT LIST 使用内嵌表达式来处理时区

 ABAP_USER_TIMEZONE:获取用户时区,不传参时默认获取当前用户当前 Client 的时区
 ABAP_SYSTEM_TIMEZONE:获取系统时区,不传参时默认获取当前 Client 的时区

SELECT abap_user_timezone( user = @( CONV uname( 'JIANGRE' ) ),
                           client = '130',
                           on_error = @sql_abap_user_timezone=>set_to_null ) AS user_zone,
       abap_system_timezone( client = '130',
                             on_error = @sql_abap_system_timezone=>set_to_null ) AS sys_zone
  FROM sflight
  INTO TABLE @DATA(lt_data)
    UP TO 1 ROWS. 

在这里插入图片描述
Built-In Functions(Date/Time Conversion)

在 SELECT LIST 使用内嵌表达式来转换日期/时间/时间戳

 TSTMP_TO_DATS:将时间戳转换成对应时区的日期
 TSTMP_TO_TIMS:将时间戳转换成对应时区的时间
 TSTMP_TO_DST:根据时间戳获取对应时区的夏令时标识
 DATS_TIMS_TO_TSTMP:将日期和时间根据时区转换成时间戳

DATA(lv_stamp) = CONV timestamp( '20190603133559' ).

SELECT tstmp_to_dats( tstmp = @lv_stamp,
                      tzone = @( CONV tznzone( 'CET' ) ) ) AS dats,
       tstmp_to_tims( tstmp = @lv_stamp,
                      tzone = @( CONV tznzone( 'CET' ) ) ) AS tims,
       tstmp_to_dst( tstmp = @lv_stamp,
                     tzone = @( CONV tznzone( 'CET' ) ) ) AS dst,
       dats_tims_to_tstmp( date = @sy-datum,
                           time = @sy-uzeit,
                           tzone = @( CONV tznzone( 'CET' ) ) ) AS tstmp
  FROM sflight
  INTO TABLE @DATA(lt_data)
    UP TO 1 ROWS. 

在这里插入图片描述

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值