Тема: преобразование timestamp в unix и наоборот
появилась необходимость работы со датой в секундах в формате Unix time. встроенных функций xbase++ и ads не обнаружил. Ниже две хранимых процедуры для перевода даты в unix и наоборот и примеры вызова.
CREATE FUNCTION COMMON.Unix ( time TIMESTAMP ) RETURNS INTEGER BEGIN declare rTIME integer; declare @startdate TIMESTAMP; SET @startdate = '1970-01-01 00:00:00'; rtime = TIMESTAMPDIFF(SQL_TSI_SECOND, @startdate,time); return rtime; END;
CREATE FUNCTION COMMON.Unix2Time ( unix INTEGER ) RETURNS TIMESTAMP BEGIN declare rDate timestamp; declare startdate TIMESTAMP; SET startdate = '1970-01-01 00:00:00'; rdate = TIMESTAMPADD(SQL_TSI_SECOND,unix,startdate); return rdate; END;
1. Примеры вызова в рамках sql запроса
select common.unix('2023-12-31 22:36:36') FROM system.iota;
select common.unix2time(1704062196) FROM system.iota;
2. Примеры вызова в рамках макроса
local oFEVSQL1
local cQuery := ""
local aReturn99 :=""
oFEVSQL1 := SpSql():New(DirCommon):create()
cQuery += "SELECT COMMON.unix2time ("
cQuery += "1704062196"
cQuery += ") as dep from system.iota"
oFEVSQL1:ExecuteDirect(cQuery,,)
aReturn99:= oFEVSQL1:dataArea:dep
oFEVSQL1:destroy()
monitor(aReturn99 )
return
local oFEVSQL1
local cQuery := ""
local aReturn99 :=""
oFEVSQL1 := SpSql():New(DirCommon):create()
cQuery += "SELECT COMMON.unix ("
cQuery += "'2023-12-31 22:36:36'"
cQuery += ") as dep from system.iota"
oFEVSQL1:ExecuteDirect(cQuery,,)
aReturn99:= oFEVSQL1:dataArea:dep
oFEVSQL1:destroy()
monitor(aReturn99 )
return