以数据库表ADR2为例,其字段VALID_FROM类型为char14,存储日期格式为YYYYMMDDHHMMSS:一些具体的示例数据:now有一个需求,开发一个CDS视图,读取所有valid_from小于当前日期的记录。ABAP752版本之后,可以在CDS视图的源码中使用$session.system_date来访问当前Applicationserver的当前日期。以下是实现此要求的步骤。创建CDS视图ZITIME,@AbapCatalog.sqlViewName:'ZJERRYTIME'@AbapCatalog.compiler.compareFilter:true@AbapCatalog.preserveKey:true@AccessControl.authorizationCheck:#CHECK@EndUserText.label:'time'defineviewzitimeasselectfromadr2{keyaddrnumberasaddnumber,country,valid_from,cast(substring(valid_from,1,8)asabap.dats)asvalid_from_date}wherevalid_from<>''先用substring提取出valid_from字段的前8个字符,然后使用cast将其转换为类型abap.dats,因为只能比较两个相同类型的字段。我们使用cast将substring函数返回的char值转换为与$session.system_date变量相同的类型。转换后,将这个新字段重命名为valid_from_date:新建CDS视图ZCTIME,将之前视图的字段valid_from_date与$session.system_date进行比较:@AbapCatalog.sqlViewName:'ZCTIMEVIEW'@AbapCatalog.compiler.compareFilter:true@AbapCatalog.preserveKey:true@AccessControl.authorizationCheck:#CHECK@EndUserText.label:'consumption'defineviewZCTIMEasselectfromzitime{keyzitime.addnumber,zitime.country,zitime.valid_from_date}其中valid_from_date<$session.system_date最终运行效果:更多Jerry原创文章在这里:《王子熙》:
