在CDS中可以对日期进行计算,增加,减少等操作,以下说明CDS中的日期相关的函数的运用.
1.带日期的计算:
作为ABAP开发人员,我们习惯于使用DATE类型的数据对象进行计算:从另一个日期字段中减去一个日期字段以计算它们之间的天数,或向日期字段添加一个整数值以计算该日期将来的某几天。因为ABAP会自动将D类型的值转换为整数值。数据库级别不存在类似的机制。为此,日期字段无法识别为日期字段。通常,数据库将它们创建为长度为8的普通字符字段。在算术表达式中使用这些字符字段将导致语法错误,而使用CAST进行类型转换将导致错误的结果。
2.dats_is_valid
- 判断字符串,是不是为有效日期
- 返回类型为INT4的结果
- 如果日期包含有效日期,则返回1,否则返回0
例子
1 |
dats_is_valid('2019-05-16') |
1 |
如果日期无效,则返回0,有效则返回1. |
3.dats_days_between(date1,date2)
- 返回类型为INT4的结果
- 计算两个日期之间的天数(对应于ABAP中的date2 – date1)
4.dats_add_days(date,count,on_error)
- 返回类型为DATS的结果
- 将计数天添加到给定日期(对应于日期+ ABAP中的计数)
5.dats_add_months(date,count,on_error)
- 返回类型为DATS的结果
- 将计数月份添加到给定的日期(ABAP中没有simpe等效项)
6.一般说明:
- 所有日期均为YYYYMMDD格式(数据库上的技术格式)
- on_error的可能值:“ FAIL”,“ NULL”,INITIAL,“ UNCHANGED”
为了用日期进行计算,从NW 7.5.0开始,CDS中提供了四个内置函数。
例子代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
@AbapCatalog.sqlViewName: 'ZTEST_I_01V' @AbapCatalog.compiler.compareFilter: true @AbapCatalog.preserveKey: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'UNIT TEST' define view ZTEST_I_01 as select from bkpf as a { key a.bukrs, key a.belnr, key a.gjahr, a.blart, a.cpudt, a.aedat, dats_is_valid(a.aedat) as BLDAT_V, dats_days_between(a.cpudt , a.aedat) as DAYS1, dats_add_days(a.aedat ,10,'FAIL') as JD10, dats_add_months(a.aedat ,10,'FAIL') as JY10 } |
结果如图,
