我的任务是使用 dbaccess 中的 UNLOAD TO 语句从数据库导出数据并将其转换为可以插入到类似数据库中的文件。
现在问题是:
旧数据库(我们称之为 DB1)中存储了从 1993 年 1 月 1 日开始的一些以分钟为单位的日期。例如,今天是 11.980.800 分钟。现在,我需要获取该值并将其转换为 格式的日期%d.%m.%Y
,以便它适合新数据库 (DB2) 中的行,该数据库仅接受 DATE 作为值。
从 DB1 导出的数据以 分隔^
。我有一些if
其他行的相关语句,但我无法处理具有 DATE 值的行,正如我已经写的那样。打印语句如下所示:
print "INSERT INTO zdv_voa(voa_fnr, voa_kritkz, voa_krit, voa_kz, voa_datv, voa_datb, voa_grund) VALUES("$1",\'"$2"\',\'"$3"\',\'"$4"\',"$5","$6",\'"$7"\');"
其中$5
和$6
是需要转换为日期的分钟。
运行 awk 脚本后,我需要一个包含以下内容的文件:
INSERT INTO zdv_voa(voa_fnr, voa_kritkz, voa_krit, voa_kz, **voa_datv**, **voa_datb**, voa_grund) VALUES(1,'P','148','T','10.10.2015','02.07.1999','60');
这里使用的日期只是示例,其他值已经由我转换。
答案1
从纪元到 1993 年 1 月 1 日过去了多少秒?
date -d '01/01/1993' +%s
时间
你可以测试一下 awk 是否允许strftime()
echo 11980000 | awk '{u=60*$1+725842800 ; printf "%d -> %s\n",u, strftime("%x",u); } '
这次回归 10/12/2015
现在在你的代码中添加
dollar5=strftime("%x",60*$5+725842800) ;
# $6 is left as an exercice ..
print "INSERT INTO zdv_voa(voa_fnr, voa_kritkz, voa_krit, voa_kz, voa_datv, voa_datb, voa_grund) VALUES("$1",\'"$2"\',\'"$3"\',\'"$4"\',\'"dollar5"\',\'"dollar6"\',\'"$7"\');"