1

我有一个日期字段,它接受 AS400 中的系统日期

显示文件包含 *DATE 的日期字段

我有一个包含日期列的物理文件。当我尝试将屏幕的其他字段保存到此物理文件时,我还想保存此系统日期。

但是我无法向这个内置的 Date 函数添加字段名称。

我怎么能在我的显示屏幕上有一个日期字段,它会自动接受系统日期并具有 DD/mm/yy 格式的输入格式,但在数据库内部它必须将其保存为 yy/mm/dd。

为了在我的日期格式数据库中进行这种内部转换,我初始化了一个名为“日期”的日期字段,长度为 6,压缩十进制,0 小数位。

请指导如何以这种格式将屏幕上的系统日期保存到物理文件中。

重新编辑:我有一个等级的 PF 接收日期定义如下。(其 DDS)

   0004.00      A            GRCVDT         6P 0  

我避免使用“L”数据类型作为日期,因为我想执行上面解释的日期转换。

4

2 回答 2

3

在显示文件上,*DATE 仅用于输出。它不能被程序读取。

听起来数据库表有一个名为 DATE 的十进制字段;不是称为 DATE 的日期字段。使用日期数据类型将使日期操作变得更加容易 - 请参阅 Dennis 的答案以获取有关建议。如果无法使用日期数据类型,而必须使用十进制数据类型来保存日期值,请查看 RPG TIME操作代码。这将允许您将当前系统日期提取到程序变量中。返回日期的确切格式取决于您的工作日期格式设置。(WRKJOB 看到那个)。如果需要,您可以使用数据结构和一系列 EVAL 语句来重新排列日期元素。

编辑将 EUR 转换为 YYMMDD 的代码示例

 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          
于 2012-08-02T14:24:04.027 回答
1

这个文件是通过 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 default

(当然,如果你这样做,你不能再从 DDS 重新创建文件而不会丢失新列)

然后在你的程序中,就在写入数据之前,执行:mydate = %date

这里有很多假设:您正在使用 ILE,您知道如何修改和重新编译程序,您正在使用自由格式或可以翻译上面的“variable = value”语法,...)

还有其他方法可以将系统日期放入文件中,而无需您的程序执行任何特殊操作;我们实际上需要更多地了解该应用程序,以便在此高级建议之外提供更多帮助。

于 2012-08-02T11:00:32.743 回答