ABAP CDS视图中的DATS到字符串转换

ABAP CDS视图中的DATS到字符串转换,abap,cds,Abap,Cds,我有一个简单的CD视图。执行时,出现错误无效格式(返回表)第1行属性名 我想我需要将日期强制转换为字符串或字符类型,但存在以下语法错误: CHAR类型上的CAST DOGUM_TARIHI:缺少目标类型的长度信息 这是我的密码: define view ZUMBS_CDS008 as select from zumhr_ddl001 as hr { personel_numarasi, personel_adi, cast(dogum_tarihi as abap.ch

我有一个简单的CD视图。执行时,出现错误
无效格式(返回表)第1行属性名

我想我需要将日期强制转换为字符串或字符类型,但存在以下语法错误:

CHAR类型上的CAST DOGUM_TARIHI:缺少目标类型的长度信息

这是我的密码:

define view ZUMBS_CDS008
as select from zumhr_ddl001 as hr  {
    personel_numarasi,
    personel_adi,
    cast(dogum_tarihi as abap.char) as te33     //<== error at this line
} group by personel_numarasi,personel_adi,dogum_tarihi
define view ZUMBS_CDS008
作为人力资源从zumhr_ddl001中选择{
努马拉西,
阿迪先生,

铸造(dogum_tarihi为abap.char)为te33/,因此,为了上帝的缘故,添加此长度信息:

cast(dogum_tarihi as abap.char(8)) as te33 
但是,这仅按原样转换日期,而不使其可读:

20190822 -> 20190822
如果要根据DD.MM.YYYY格式使其可读,请如下所示:

@AbapCatalog.sqlViewName: 'zcds_sql_usr02'
@EndUserText.label: 'test CDS view'
define view zcds_usr02 as select from usr02 
{
    usr02.bname,
    usr02.gltgb,
    cast(usr02.gltgb as abap.char(10)) as casted,
    concat(
     concat(substring( usr02.gltgb, 7, 2 ), '.'), 
     concat(substring( usr02.gltgb, 5, 2 ), concat('.', substring( usr02.gltgb, 1, 4 )))
     ) as readable
}
where usr02.gltgb <> '00000000';
@AbapCatalog.sqlViewName:'zcds\u sql\u usr02'
@EndUserText.label:“测试CD视图”
将视图zcds_usr02定义为从usr02中选择
{
usr02.bname,
usr02.gltgb,
铸态(usr02.gltgb为abap.char(10))铸态,
海螺(
concat(子串(usr02.gltgb,7,2),'),
concat(子字符串(usr02.gltgb,5,2),concat('.',子字符串(usr02.gltgb,1,4)))
)易读
}
其中usr02.gltgb'00000000';

这将使从20190822开始的日期为2019年8月22日

我已经编辑了您的问题,以包含语法错误消息,我想您已经编辑了。如果不正确,请编辑它。我建议继续使用
yyyymmdd
yyyyy-mm-dd
,因为ISO-8601是唯一使用的“实时”日期格式()。如果您计划对从CD读取的结果应用筛选或排序,您将很难使用
DD.MM.YYYY
。顺便说一句:我希望有一种方法可以将CD数据作为正确的日期字符串返回,以便可以应用OData本机日期时间筛选器。我怀疑它实际上不受支持。
我建议继续使用yyyymmdd
这取决于OP对日期的处理方式,如果只是输出,则可读格式是可以的。与本机OData Edm.DateTime类型有关的内容我想ABAP CD本机不支持它,但HANA CD支持它