以資料庫表 ADR2
為例,其欄位 VALID_FROM
型別為 char14,儲存的日期格式為 YYYYMMDDHHMMSS
:
一些具體的例子資料:
現在有個需求,開發一個 CDS view,將 valid_from
小於當前日期的記錄全部讀取出來。
ABAP 752 版本之後,可以使用 $session.system_date
在 CDS view 的原始碼裡訪問當前 Application server 的當前日期。
下面是這個需求的實現步驟。
- 建立一個 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
:
- 新建一個 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的原創文章,盡在:"汪子熙":