From 39f6d4cf50ab2b68f61c5c7a8046213cbe26153d Mon Sep 17 00:00:00 2001 From: teo_sarca Date: Fri, 2 Nov 2007 06:11:31 +0000 Subject: [PATCH] BF [ 1824260 ] TRUNC function not working like in Oracle --- db/ddlutils/postgresql/functions/trunc.sql | 4 +-- migration/330-trunk/028_BF_1824260.sql | 4 +++ .../330-trunk/postgresql/028_BF_1824260.sql | 35 +++++++++++++++++++ 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 migration/330-trunk/028_BF_1824260.sql create mode 100644 migration/330-trunk/postgresql/028_BF_1824260.sql diff --git a/db/ddlutils/postgresql/functions/trunc.sql b/db/ddlutils/postgresql/functions/trunc.sql index 27d5a3c117..d344d18bdb 100644 --- a/db/ddlutils/postgresql/functions/trunc.sql +++ b/db/ddlutils/postgresql/functions/trunc.sql @@ -31,9 +31,9 @@ RETURNS DATE AS $$ BEGIN IF format = 'Q' THEN RETURN CAST(DATE_Trunc('quarter',datetime) as DATE); - ELSIF format = 'Y' THEN + ELSIF format = 'Y' or format = 'YEAR' THEN RETURN CAST(DATE_Trunc('year',datetime) as DATE); - ELSIF format = 'MM' THEN + ELSIF format = 'MM' or format = 'MONTH' THEN RETURN CAST(DATE_Trunc('month',datetime) as DATE); ELSIF format = 'DD' THEN RETURN CAST(DATE_Trunc('day',datetime) as DATE); diff --git a/migration/330-trunk/028_BF_1824260.sql b/migration/330-trunk/028_BF_1824260.sql new file mode 100644 index 0000000000..3140f756c6 --- /dev/null +++ b/migration/330-trunk/028_BF_1824260.sql @@ -0,0 +1,4 @@ +-- BF [ 1824260 ] TRUNC function not working like in Oracle +-- http://sourceforge.net/tracker/?func=detail&atid=879332&aid=1824260&group_id=176962 +-- +-- Nothing to do for Oracle, this is just a sequence placeholder diff --git a/migration/330-trunk/postgresql/028_BF_1824260.sql b/migration/330-trunk/postgresql/028_BF_1824260.sql new file mode 100644 index 0000000000..033bd1a1d8 --- /dev/null +++ b/migration/330-trunk/postgresql/028_BF_1824260.sql @@ -0,0 +1,35 @@ +-- BF [ 1824260 ] TRUNC function not working like in Oracle +-- http://sourceforge.net/tracker/?func=detail&atid=879332&aid=1824260&group_id=176962 +-- +CREATE OR REPLACE FUNCTION trunc(datetime TIMESTAMP WITH TIME ZONE) +RETURNS DATE AS $$ +BEGIN + RETURN CAST(datetime AS DATE); +END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION trunc(datetime TIMESTAMP WITH TIME ZONE, format varchar) +RETURNS DATE AS $$ +BEGIN + IF format = 'Q' THEN + RETURN CAST(DATE_Trunc('quarter',datetime) as DATE); + ELSIF format = 'Y' or format = 'YEAR' THEN + RETURN CAST(DATE_Trunc('year',datetime) as DATE); + ELSIF format = 'MM' or format = 'MONTH' THEN + RETURN CAST(DATE_Trunc('month',datetime) as DATE); + ELSIF format = 'DD' THEN + RETURN CAST(DATE_Trunc('day',datetime) as DATE); + ELSIF format = 'DY' THEN + RETURN CAST(DATE_Trunc('day',datetime) as DATE); + ELSE + RETURN CAST(datetime AS DATE); + END IF; +END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION trunc(i INTERVAL) +RETURNS INTEGER AS $$ +BEGIN + RETURN EXTRACT(DAY FROM i); +END; +$$ LANGUAGE plpgsql;