【发布时间】:2016-03-23 19:29:59
【问题描述】:
我目前正在将 Informix ESQL/C 程序重写为 Perl。我遇到的问题之一是试图在 Perl 中获得与 rtoday() 完全相同的值。
查看 IBM 的文档后: http://www.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/com.ibm.esqlc.doc/sii-xbrstod-41016.htm%23sii-xbrstod-41016
"today
A pointer to an int4 value that receives the internal DATE.
Usage
The rtoday() function obtains the system date on the client computer, not
the server computer."
在命令行上执行 echo $DATE 时,我得到:
username@myServer:/u/aDir/ $ echo $DATE
2457470 for March 23, 2016
但是当我通过昨天在我的 Unix 机器上的日志获取值时,我有:
42447 for March 22,2016
(日志来自我的 ESQL 程序)
问题是我需要使用rtoday() 值,以便将该值导出到平面文件(连同其他数据)中,以便其他程序进行处理。
我只需要知道如何在 Perl 中或通过系统命令行获取此值,以便我可以使用它。
【问题讨论】:
-
我假设您的 Perl 脚本将在客户端上运行并使用 DBI 或类似的东西连接到远程数据库?
-
@ThisSuitIsBlackNot Perl 脚本将在与数据库相同的服务器上运行。 ESQL 程序也是如此
-
我认为您需要弄清楚的是他们计算
internal date的方式(那里的示例脚本中名为i_date的变量。 -
@ThisSuitIsBlackNot 我想我找到了它:Informix ESQL/C 支持 SQL DATE 数据类型和主变量的 Informix ESQL/C 日期数据类型。日期数据类型存储内部 DATE 值。它实现为一个 4 字节整数,其值为自 1899 年 12 月 31 日以来的天数。1899 年 12 月 31 日之前的日期是负数,而 1899 年 12 月 31 日之后的日期是正数。有关 SQL DATE 数据类型的完整描述,请参阅 IBM® Informix® Guide to SQL: Reference。
-
我很困惑为什么你从我这里得到的值如此不同——我在 2016 年 3 月 23 日得到了 42451,但你的值却有 3 个不同 (42448)。您检查过系统时钟和/或 TZ 值吗?