2016-01-28 2 views

ответ

3

Если у вас есть секунд с момента эпохи Unix, использования:

select 
    {fn TIMESTAMPADD(SQL_TSI_SECOND, 1453974057, TIMESTAMP('1970-01-01-00.00.00.000000')) } as DT 
from sysibm.SYSDUMMY1 

Просто замените "sysibm.SYSDUMMY1" с исходной таблицей, и заменить 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 

Просто замените 3 экземпляра 1453974057235 с значением.

Смежные вопросы