Built-In Functions

Num

常见的数值表达式如下:

  • ABS:获取绝对值
  • CEIL:向上取整
  • FLOOR:向下取整
  • DIV:除法计算,取整数位
  • DIVISION:除法计算,保留 N 位小数
  • MOD:除法计算,取余数
  • ROUND:计算舍入值
DATA(lv_dec) = CONV zdec_3_demo( '-123.456' ).
abs( lv_dec )
ceil( lv_dec )
floor( lv_dec )
div( -4 , -3 )
division( -4 , -3 , 2 )
mod( -4 , -3 )
round( lv_dec , 2 )
round( lv_dec , -2 )

String

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

Date/Time

  • 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' ). 
dats_is_valid( fldate )
tims_is_valid( @sy-uzeit )
dats_days_between( fldate , @lv_date )
dats_add_days( fldate , 10 )
dats_add_months( fldate , 3 )

Time Stamp

  • 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' ).

tstmp_is_valid( @lv_stamp_now )
tstmp_current_utctimestamp( )
tstmp_seconds_between( tstmp1 = @lv_stamp_past,
                              tstmp2 = @lv_stamp_now,
                              on_error = @sql_tstmp_seconds_between=>set_to_null )
tstmp_add_seconds( tstmp = @lv_stamp_now,
                          seconds = @( CONV timestamp( 999 ) ),
                          on_error = @sql_tstmp_add_seconds=>set_to_null )

Time Zone

  • ABAP_USER_TIMEZONE:获取用户时区,不传参时默认获取当前用户当前 Client 的时区
  • ABAP_SYSTEM_TIMEZONE:获取系统时区,不传参时默认获取当前 Client 的时区
abap_user_timezone( user = @( CONV uname( 'JIANGRE' ) ), client = '130', 
					on_error = @sql_abap_user_timezone=>set_to_null )
abap_system_timezone( client = '130', on_error = @sql_abap_system_timezone=>set_to_null ) 

Date/Time Conversion

  • TSTMP_TO_DATS:将时间戳转换成对应时区的日期
  • TSTMP_TO_TIMS:将时间戳转换成对应时区的时间
  • TSTMP_TO_DST:根据时间戳获取对应时区的夏令时标识
  • DATS_TIMS_TO_TSTMP:将日期和时间根据时区转换成时间戳
DATA(lv_stamp) = CONV timestamp( '20190603133559' ).
tstmp_to_dats( tstmp = @lv_stamp, tzone = @( CONV tznzone( 'CET' ) ) ) 
tstmp_to_tims( tstmp = @lv_stamp, tzone = @( CONV tznzone( 'CET' ) ) ) 
tstmp_to_dst( tstmp = @lv_stamp, tzone = @( CONV tznzone( 'CET' ) ) ) 
dats_tims_to_tstmp( date = @sy-datum, time = @sy-uzeit, tzone = @( CONV tznzone( 'CET' ) ) )