ABAP透明表里的时间戳,数据类型为dec:

有个需求:计算这两个时间戳之间的天数间隔,丢弃时间戳年-月-日8位后面的小时:分钟:秒。

举个例子:如果时间戳是20180918173132,丢弃173132,只保留20180918, 然后再计算天数间隔。

直接用CDS view的字符串操作函数substring是不行的,因为时间戳类型dec和substring期待的字符串类型不匹配。

解决方案:

先将时间戳字段类型从dec强制转换成abap.dats:

@AbapCatalog.sqlViewName:'zproday'@AbapCatalog.compiler.compareFilter:true@AccessControl.authorizationCheck:#CHECK@EndUserText.label:'Daybetween'defineviewzdate_day_betweenasselectfromcomm_product{keycomm_product.product_idasprod_id,comm_product.product_guidasprod_guid,comm_product.valid_fromasvalid_from,comm_product.valid_toasvalid_to,cast(substring(cast(valid_fromasabap.char(32)),1,8)asabap.dats)asfrom_date,cast(substring(cast(valid_toasabap.char(32)),1,8)asabap.dats)asto_date}

然后再用CDS view标准的时间处理函数DATS_DAYS_BETWEEN:

@AbapCatalog.sqlViewName:'zdbetw'@AbapCatalog.compiler.compareFilter:true@AccessControl.authorizationCheck:#CHECK@EndUserText.label:'Daybetween'defineviewzc_date_day_betweenasselectfromzdate_day_betweenashost{keyhost.prod_guid,host.prod_id,host.from_date,host.to_date,DATS_DAYS_BETWEEN(host.from_date,host.to_date)asno_of_days}

测试结果:

要获取更多Jerry的原创文章,请关注公众号"汪子熙":