我有一个日期字段,它接受AS400 中的系统日期
显示文件包含*date 的日期字段
我有一个带有日期列的物理文件。当我尝试将屏幕的其他字段保存到这个物理文件上时,我也想保存这个系统日期。
但是我无法将字段名添加到这个内置的Date函数中。
否则,我怎么能在显示屏上有一个日期字段,它会自动接受系统日期,并以DD/mm/yy格式输入,但在数据库内部,它必须将其保存为yy/mm/DD。
为了在我的日期格式数据库中进行这种内部转换,我初始化了一个名为"日期"的日期字段,长度为6,压缩小数,0位小数。
请指导如何将屏幕上的系统日期以这种格式保存到物理文件中。
重新审核:我有一个PF的成绩收到日期定义如下。(其DDS)
0004.00 A GRCVDT 6P 0
我避免使用"L"数据类型的日期,因为我想执行日期转换,如上所述。
在显示文件中,*DATE仅输出。程序无法读取它。
听起来数据库表有一个名为DATE的十进制字段;而不是名为date的日期字段。使用日期数据类型将使日期操作变得更加容易——请参阅Dennis的回答以获得有关建议。如果不可能使用日期数据类型,并且必须使用十进制数据类型来保存日期值,请查看RPG TIME操作代码。这将允许您将当前系统日期提取到程序变量中。返回日期的确切格式取决于您的工作日期格式设置。(WRKJOB看到了)。如果需要,您可以使用数据结构和一系列EVAL语句来重新排列日期元素。
编辑代码示例以将EUR转换为YYYMMDD
d eur ds qualified
d ddmmyy 6s 0
d dd 2s 0 overlay(ddmmyy: 1)
d mm 2s 0 overlay(ddmmyy: 3)
d yy 2s 0 overlay(ddmmyy: 5)
d ymd ds qualified
d yymmdd 6s 0
d yy 2s 0 overlay(yymmdd: 1)
d mm 2s 0 overlay(yymmdd: 3)
d dd 2s 0 overlay(yymmdd: 5)
c/free
eur.ddmmyy = 020812;
ymd.yy = eur.yy;
ymd.mm = eur.mm;
ymd.dd = eur.dd;
dsply ymd.yymmdd;
*inlr = *on;
/end-free
此文件是通过DDS还是SQL创建的?如果是DDS,请将您选择的字段添加到DDS规格中,并指定数据类型L:
A MYDATE L
然后使用CHGPF,指定源文件和成员名称;系统将添加新列。
CHGPF FILE(MYLIB/MYFILE)
SRCFILE(MYSRCLIB/MYSOURCE)
SRCMBR(MY_MBR)
即使您的文件是DDS描述的,您也可以使用SQL语句添加日期列,如:alter table mytable add column mydate date not null默认
(当然,如果你这样做,你就无法再从DDS中重新创建文件而不丢失新列)
然后在程序中,在写入数据之前,执行以下操作:mydate=%date
这里有很多假设:你正在使用ILE,你知道如何修改和重新编译程序,你正在使用自由形式,或者可以翻译上面的"variable=value"语法,…)
还有其他方法可以将系统日期放入文件中,而无需您的程序执行任何特殊操作;实际上,我们需要了解更多关于应用程序的信息,以便在这个高级建议之外提供更多帮助。