четверг, 21 мая 2009 г.

Извлечь TIMESTAMP поле из базы данных в виде unix timestamp

Сегодня столкнулся с такой проблемой - нужно было извлечь из базы поле типа TIMESTAMP и результат выборки преобразовать в различные форматы дат. Естественно, для подобных преобразований хотелось бы использовать функции работы со временем из библиотеки Си. Оставалось только преобразовать TIMESTAMP из формата БД в unix формат. После недолгих поисков нашел в интернете такое решение (пример для IBM DB2, однако с некоторыми изменениями подойдет и для любой другой СУБД):

CREATE FUNCTION EPOCH (DB2TIME TIMESTAMP)
RETURNS INTEGER
LANGUAGE SQL
CONTAINS SQL
DETERMINISTIC
RETURN CAST (DAYS(DB2TIME) - DAYS('1970-01-01') AS INTEGER) * 86400 + MIDNIGHT_SECONDS(DB2TIME);

Напомню, что тип time_t в Си или поле TIMESTAMP в БД хранит количество секунд, прошедших с полуночи (00:00:00) 1 Января 1970 года по всемирному времени (UTC, Coordinated Universal Time).