2004-10-15 22:00:43 +02:00
-- ============================================================================
-- Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
--
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
--
-- $Id$
-- ============================================================================
2009-10-25 19:53:09 +01:00
CREATE OR REPLACE FUNCTION UNIX_TIMESTAMP ( TIMESTAMP WITHOUT TIME ZONE ) RETURNS BIGINT LANGUAGE SQL IMMUTABLE STRICT AS ' SELECT EXTRACT(EPOCH FROM $1)::bigint; ' ;
2004-10-15 22:00:43 +02:00
2009-10-25 19:53:09 +01:00
CREATE OR REPLACE FUNCTION UNIX_TIMESTAMP ( TIMESTAMP WITH TIME ZONE ) RETURNS BIGINT LANGUAGE SQL IMMUTABLE STRICT AS ' SELECT EXTRACT(EPOCH FROM $1)::bigint; ' ;
2004-10-15 22:00:43 +02:00
2009-10-25 19:53:09 +01:00
CREATE OR REPLACE FUNCTION FROM_UNIXTIME ( BIGINT , VARCHAR ) RETURNS TIMESTAMP WITH TIME ZONE LANGUAGE SQL IMMUTABLE STRICT AS ' SELECT TIMESTAMP WITH TIME ZONE \ ' epoch \ ' + $1 * interval \ ' 1 second \ ' ; ' ;
2009-10-28 19:00:29 +01:00
CREATE OR REPLACE FUNCTION date_format ( timestamp without time zone , text ) RETURNS text AS $ $ DECLARE i int : = 1 ; temp text : = ' ' ; c text ; n text ; res text ; BEGIN WHILE i < = pg_catalog . length ( $ 2 ) LOOP c : = SUBSTRING ( $ 2 FROM i FOR 1 ) ; IF c = ' % ' AND i ! = pg_catalog . length ( $ 2 ) THEN n : = SUBSTRING ( $ 2 FROM ( i + 1 ) FOR 1 ) ; SELECT INTO res CASE WHEN n = ' a ' THEN pg_catalog . to_char ( $ 1 , ' Dy ' ) WHEN n = ' b ' THEN pg_catalog . to_char ( $ 1 , ' Mon ' ) WHEN n = ' c ' THEN pg_catalog . to_char ( $ 1 , ' FMMM ' ) WHEN n = ' D ' THEN pg_catalog . to_char ( $ 1 , ' FMDDth ' ) WHEN n = ' d ' THEN pg_catalog . to_char ( $ 1 , ' DD ' ) WHEN n = ' e ' THEN pg_catalog . to_char ( $ 1 , ' FMDD ' ) WHEN n = ' f ' THEN pg_catalog . to_char ( $ 1 , ' US ' ) WHEN n = ' H ' THEN pg_catalog . to_char ( $ 1 , ' HH24 ' ) WHEN n = ' h ' THEN pg_catalog . to_char ( $ 1 , ' HH12 ' ) WHEN n = ' I ' THEN pg_catalog . to_char ( $ 1 , ' HH12 ' ) WHEN n = ' i ' THEN pg_catalog . to_char ( $ 1 , ' MI ' ) WHEN n = ' j ' THEN pg_catalog . to_char ( $ 1 , ' DDD ' ) WHEN n = ' k ' THEN pg_catalog . to_char ( $ 1 , ' FMHH24 ' ) WHEN n = ' l ' THEN pg_catalog . to_char ( $ 1 , ' FMHH12 ' ) WHEN n = ' M ' THEN pg_catalog . to_char ( $ 1 , ' FMMonth ' ) WHEN n = ' m ' THEN pg_catalog . to_char ( $ 1 , ' MM ' ) WHEN n = ' p ' THEN pg_catalog . to_char ( $ 1 , ' AM ' ) WHEN n = ' r ' THEN pg_catalog . to_char ( $ 1 , ' HH12:MI:SS AM ' ) WHEN n = ' S ' THEN pg_catalog . to_char ( $ 1 , ' SS ' ) WHEN n = ' s ' THEN pg_catalog . to_char ( $ 1 , ' SS ' ) WHEN n = ' T ' THEN pg_catalog . to_char ( $ 1 , ' HH24:MI:SS ' ) WHEN n = ' U ' THEN pg_catalog . to_char ( $ 1 , ' ? ' ) WHEN n = ' u ' THEN pg_catalog . to_char ( $ 1 , ' ? ' ) WHEN n = ' V ' THEN pg_catalog . to_char ( $ 1 , ' ? ' ) WHEN n = ' v ' THEN pg_catalog . to_char ( $ 1 , ' ? ' ) WHEN n = ' W ' THEN pg_catalog . to_char ( $ 1 , ' FMDay ' ) WHEN n = ' w ' THEN EXTRACT ( DOW FROM $ 1 ) : : text WHEN n = ' X ' THEN pg_catalog . to_char ( $ 1 , ' ? ' ) WHEN n = ' x ' THEN pg_catalog . to_char ( $ 1 , ' ? ' ) WHEN n = ' Y ' THEN pg_catalog . to_char ( $ 1 , ' YYYY ' ) WHEN n = ' y ' THEN pg_catalog . to_char ( $ 1 , ' YY ' ) WHEN n = ' % ' THEN pg_catalog . to_char ( $ 1 , ' % ' ) ELSE NULL END ; temp : = temp operator ( pg_catalog . | | ) res ; i : = i + 2 ; ELSE temp = temp operator ( pg_catalog . | | ) c ; i : = i + 1 ; END IF ; END LOOP ; RETURN temp ; END $ $ IMMUTABLE STRICT LANGUAGE PLPGSQL ;