将 unix 纪元时间转换为 Apache Derby 中的日期
Convert unix epoch time to a date in Apache Derby
Apache Derby 中是否有可以将 unix 纪元时间值(例如 1453974057 )转换为日期的函数?
如果你有 seconds 自 unix epoch,使用:
select
{fn TIMESTAMPADD(SQL_TSI_SECOND, 1453974057, TIMESTAMP('1970-01-01-00.00.00.000000')) } as DT
from sysibm.SYSDUMMY1
只需将 "sysibm.SYSDUMMY1" 替换为您原来的 table,并将 1453974057 替换为您的值即可。
当处理毫秒时,它变得有点复杂,因为您不能直接使用 TIMESTAMPADD(您得到 SQL 状态 22003:结果值超出数据类型 INTEGER 的范围。)
如果你有 毫秒 自 unix 时代以来,使用:
select
--the following block converts milliseconds since linux epoch to a timestamp
{ fn TIMESTAMPADD(
SQL_TSI_FRAC_SECOND,
(
--add the millisecond component
1453974057235 - { fn TIMESTAMPDIFF(
SQL_TSI_SECOND,
TIMESTAMP('1970-01-01-00.00.00.000000'),
{ fn TIMESTAMPADD(SQL_TSI_SECOND, 1453974057235/1000, TIMESTAMP('1970-01-01-00.00.00.000000')) }
)} * 1000
) * 1000000,
{ fn TIMESTAMPADD(SQL_TSI_SECOND, 1453974057235/1000, TIMESTAMP('1970-01-01-00.00.00.000000')) }
)} as FINAL_DT
from SYSIBM.SYSDUMMY1
只需将 1453974057235 的 3 个实例替换为您的值即可。
下面是基于 Fidel 回答的简化表达式:
select { fn TIMESTAMPADD(SQL_TSI_FRAC_SECOND, mod(1453974057, 1000) * 1000000,
{ fn TIMESTAMPADD(SQL_TSI_SECOND, 1453974057 / 1000,
TIMESTAMP('1970-01-01-00.00.00.000000'))
})
}
from sysibm.SYSDUMMY1;
针对本地 JavaDB 实例进行了测试。
Apache Derby 中是否有可以将 unix 纪元时间值(例如 1453974057 )转换为日期的函数?
如果你有 seconds 自 unix epoch,使用:
select
{fn TIMESTAMPADD(SQL_TSI_SECOND, 1453974057, TIMESTAMP('1970-01-01-00.00.00.000000')) } as DT
from sysibm.SYSDUMMY1
只需将 "sysibm.SYSDUMMY1" 替换为您原来的 table,并将 1453974057 替换为您的值即可。
当处理毫秒时,它变得有点复杂,因为您不能直接使用 TIMESTAMPADD(您得到 SQL 状态 22003:结果值超出数据类型 INTEGER 的范围。)
如果你有 毫秒 自 unix 时代以来,使用:
select
--the following block converts milliseconds since linux epoch to a timestamp
{ fn TIMESTAMPADD(
SQL_TSI_FRAC_SECOND,
(
--add the millisecond component
1453974057235 - { fn TIMESTAMPDIFF(
SQL_TSI_SECOND,
TIMESTAMP('1970-01-01-00.00.00.000000'),
{ fn TIMESTAMPADD(SQL_TSI_SECOND, 1453974057235/1000, TIMESTAMP('1970-01-01-00.00.00.000000')) }
)} * 1000
) * 1000000,
{ fn TIMESTAMPADD(SQL_TSI_SECOND, 1453974057235/1000, TIMESTAMP('1970-01-01-00.00.00.000000')) }
)} as FINAL_DT
from SYSIBM.SYSDUMMY1
只需将 1453974057235 的 3 个实例替换为您的值即可。
下面是基于 Fidel 回答的简化表达式:
select { fn TIMESTAMPADD(SQL_TSI_FRAC_SECOND, mod(1453974057, 1000) * 1000000,
{ fn TIMESTAMPADD(SQL_TSI_SECOND, 1453974057 / 1000,
TIMESTAMP('1970-01-01-00.00.00.000000'))
})
}
from sysibm.SYSDUMMY1;
针对本地 JavaDB 实例进行了测试。