SAP CDS view 如何将 CHAR 类型的数据字段和当前系统日期比较

举报
汪子熙 发表于 2022/10/03 11:13:41 2022/10/03
【摘要】 以数据库表 ADR2 为例,其字段 VALID_FROM 类型为 char14,存储的日期格式为 YYYYMMDDHHMMSS:一些具体的例子数据:现在有个需求,开发一个 CDS view,将 valid_from 小于当前日期的记录全部读取出来。ABAP 752 版本之后,可以使用 $session.system_date 在 CDS view 的源代码里访问当前 Application ...

以数据库表 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

最后的运行效果:

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。