两个日期时间之间的差异(以毫秒为单位)(Informix)

Posted

技术标签:

【中文标题】两个日期时间之间的差异(以毫秒为单位)(Informix)【英文标题】:Difference between two datetime in milliseconds (Informix) 【发布时间】:2013-10-18 05:07:55 【问题描述】:

我可以找到类似的东西来在几秒钟内找到差异。但我无法找到如何以毫秒为单位找到差异。

select (start_time - datetime(2013-08-12 19:05:34.223) year to fraction(3))
    ::interval second(9) to second 
    from table1 where event_id = 1

【问题讨论】:

我想在java中做这个。因此,以防万一是否有一些特定于 java 的粗略方法可以实现这一点。 您究竟需要实现什么?你尝试过什么? 你贴的代码是sql查询,跟java无关 【参考方案1】:

首先,如果您真的想要数据库中的毫秒详细信息,您需要检查 USEOSTIME 参数是否已激活(默认情况下未激活)。 Informix 仅在数据库配置为使用 OS TIME 时显示小数/毫秒(这意味着它们使用 OS gettime() 函数)。 禁用此选项后,小数部分始终为零。

如果未激活,您或 DBA 需要在 onconfig 文件中更改它并重新启动引擎。

小心,因为这会影响数据库中使用的所有时间戳

select * from sysmaster:sysconfig where cf_name = 'USEOSTIME';
    cf_id         54
    cf_name       USEOSTIME
    cf_flags      0
    cf_original   1
    cf_effective  1
    cf_default    0
    1 row(s) retrieved.

drop table if exists tp01;
    Table dropped.

create temp table tp01 ( dt datetime year to fraction );
    Temporary table created.
insert into tp01 values ( current);
    1 row(s) inserted.

select * from tp01;
    dt
    2013-10-18 08:29:36.864
    1 row(s) retrieved.
select dt, current, (current - dt)::interval second(9) to fraction from tp01;
    dt                      (expression)            (expression)
    2013-10-18 08:29:36.864 2013-10-18 08:29:36.864          0.000
    1 row(s) retrieved.
select dt, current, ((current - dt)::interval second(9) to fraction)*1000 from tp01;
    dt                      (expression)            (expression)
    2013-10-18 08:29:36.864 2013-10-18 08:29:36.865          1.000
    1 row(s) retrieved.

在这里,等待 8 秒后,我重新运行上面的选择...

dt                      (expression)            (expression)
2013-10-18 08:30:44.539 2013-10-18 08:30:53.058          8.519

dt                      (expression)            (expression)
2013-10-18 08:30:44.539 2013-10-18 08:30:53.058       8519.000

【讨论】:

帮助很大!!!!而且信息量很大……谢谢巴德。只需一个快速的 Q .. “second(9)”中的 9 代表什么 @Andy897 所以你的问题毕竟不是针对Java的=\ 使用区间时,需要指定较大值的“范围”,例如可以将此值设置为区间日期类型:10432.455 即 10,432 秒。 (9) 表示您可以使用 9 位数字 ~= 999,999,999 秒,如果您限制为 (3),那么您可以将值限制为 999 秒......加上:这可以很容易地转换为使用演员表的天数::interval day(3) to second. 我忘了说 .... USEOSTIME 仅在您使用 current 语句时才有用,如果您的小数值是从您的应用程序输入的,请不要担心 USEOSTIME ,所有计算都应该是工作没有问题。【参考方案2】:

对不起,java 特定的代码,但下面是对你有用的 sql 代码:

select (datediff(ss,StartDate,EndDate)*1000)

【讨论】:

.... 我不确定 Informix 是否有 datediff() 函数。请注意,DB2 版本会返回一个估计值,这通常是毫无价值的。 informix(当前版本,12.10)中不存在此功能 datediff 函数属于 mssql

以上是关于两个日期时间之间的差异(以毫秒为单位)(Informix)的主要内容,如果未能解决你的问题,请参考以下文章

以纳秒为单位的快速日期差异不起作用

两个日期之间的差异(以分钟为单位)

想要在存储过程中以毫秒为单位获取两个时间戳的差异

以分钟为单位计算两个日期之间的时间差

计算时差,结果以 Seconds.ms (xxxx.xxx) 为单位

如何检查两个日期之间的差异(以秒为单位)?