以数据库表 ADR2 为例,其字段 VALID_FROM 类型为 char14,存储的日期格局为 YYYYMMDDHHMMSS

一些具体的例子数据:

当初有个需要,开发一个 CDS view,将 valid_from 小于以后日期的记录全副读取进去。

ABAP 752 版本之后,能够应用 $session.system_date 在 CDS view 的源代码里拜访以后 Application server 的以后日期。

上面是这个需要的实现步骤。

  1. 创立一个 CDS view ZITIME,
@AbapCatalog.sqlViewName: 'ZJERRYTIME'@AbapCatalog.compiler.compareFilter: true@AbapCatalog.preserveKey: true@AccessControl.authorizationCheck: #CHECK@EndUserText.label: 'time'define view zitime as select from adr2 {    key addrnumber as addnumber,    country,    valid_from,    cast(substring(valid_from,1,8) as abap.dats) as valid_from_date} where valid_from <> ''

首先应用 substring 将 valid_from 字段前8个字符提取进去,而后应用 cast 将其转换成类型 abap.dats, 因为只有类型雷同的两个字段,能力进行比拟。咱们应用 cast 将 substring 函数返回的 char 类型的值,转换成和 $session.system_date 变量雷同的类型。

转换结束之后,将这个新的字段重命名为 valid_from_date:

  1. 新建一个 CDS view ZCTIME,将前一个视图的字段 valid_from_date$session.system_date 比拟即可:
@AbapCatalog.sqlViewName: 'ZCTIMEVIEW'@AbapCatalog.compiler.compareFilter: true@AbapCatalog.preserveKey: true@AccessControl.authorizationCheck: #CHECK@EndUserText.label: 'consumption'define view ZCTIME as select from zitime {    key zitime.addnumber,    zitime.country,    zitime.valid_from_date} where valid_from_date < $session.system_date

最初的运行成果:

更多Jerry的原创文章,尽在:"汪子熙":