| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560 |
- CREATE OR REPLACE FUNCTION FIND_IN_SET(
- target text,
- list text
- ) RETURNS boolean AS $$
- DECLARE
- arr text[];
- i integer;
- BEGIN
- IF list IS NULL OR list = '' THEN
- RETURN false;
- END IF;
- arr := string_to_array(list, ',');
- FOR i IN 1..array_length(arr, 1) LOOP
- IF arr[i] = target THEN
- RETURN true;
- END IF;
- END LOOP;
- RETURN false;
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- --
- CREATE OR REPLACE FUNCTION FIND_IN_SET(
- target integer,
- list text
- ) RETURNS boolean AS $$
- BEGIN
- RETURN FIND_IN_SET(target::text, list);
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- --
- CREATE OR REPLACE FUNCTION GROUP_CONCAT(
- input text,
- delimiter text = ','
- ) RETURNS text AS $$
- BEGIN
- RETURN string_agg(input, delimiter);
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- CREATE OR REPLACE FUNCTION GROUP_CONCAT(
- input numeric,
- delimiter text = ','
- ) RETURNS text AS $$
- BEGIN
- RETURN string_agg(input::text, delimiter);
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- CREATE OR REPLACE FUNCTION GROUP_CONCAT(
- input integer,
- delimiter text = ','
- ) RETURNS text AS $$
- BEGIN
- RETURN string_agg(input::text, delimiter);
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- --
- CREATE OR REPLACE FUNCTION ROUND(
- num float,
- decimals integer
- ) RETURNS numeric AS $$
- BEGIN
- RETURN ROUND(num::numeric, decimals);
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- --
- CREATE OR REPLACE FUNCTION ROUND(
- num double precision,
- decimals integer
- ) RETURNS numeric AS $$
- BEGIN
- RETURN ROUND(num::numeric, decimals);
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- --
- CREATE OR REPLACE FUNCTION ROUND(
- num text,
- decimals integer
- ) RETURNS numeric AS $$
- BEGIN
- RETURN ROUND(num::numeric, decimals);
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- --
- CREATE OR REPLACE FUNCTION TIMESTAMPDIFF(
- unit TEXT,
- start_time TIMESTAMP,
- end_time TIMESTAMP
- ) RETURNS INTEGER AS $$
- DECLARE
- diff_interval INTERVAL;
- diff_seconds NUMERIC;
- BEGIN
- diff_interval := end_time - start_time;
- CASE lower(unit)
- WHEN 'year' THEN
- RETURN EXTRACT(YEAR FROM end_time) - EXTRACT(YEAR FROM start_time)
- - CASE WHEN (EXTRACT(MONTH FROM end_time) < EXTRACT(MONTH FROM start_time))
- OR (EXTRACT(MONTH FROM end_time) = EXTRACT(MONTH FROM start_time)
- AND EXTRACT(DAY FROM end_time) < EXTRACT(DAY FROM start_time))
- THEN 1 ELSE 0 END;
- WHEN 'month' THEN
- RETURN (EXTRACT(YEAR FROM end_time) - EXTRACT(YEAR FROM start_time)) * 12
- + (EXTRACT(MONTH FROM end_time) - EXTRACT(MONTH FROM start_time))
- - CASE WHEN EXTRACT(DAY FROM end_time) < EXTRACT(DAY FROM start_time)
- THEN 1 ELSE 0 END;
- WHEN 'day' THEN
- RETURN EXTRACT(DAY FROM diff_interval);
- WHEN 'hour' THEN
- diff_seconds := EXTRACT(EPOCH FROM diff_interval);
- RETURN floor(diff_seconds / 3600);
- WHEN 'minute' THEN
- diff_seconds := EXTRACT(EPOCH FROM diff_interval);
- RETURN floor(diff_seconds / 60);
- WHEN 'second' THEN
- RETURN EXTRACT(EPOCH FROM diff_interval);
- ELSE
- RETURN NULL;
- END CASE;
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- --
- CREATE OR REPLACE FUNCTION IFNULL(bigint, integer)
- RETURNS bigint AS $$
- BEGIN
- RETURN COALESCE($1, $2::bigint);
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- --
- CREATE OR REPLACE FUNCTION IFNULL(double precision, integer)
- RETURNS double precision AS $$
- BEGIN
- RETURN COALESCE($1, $2::double precision);
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- --
- CREATE OR REPLACE FUNCTION IFNULL(integer, bigint)
- RETURNS bigint AS $$
- BEGIN
- RETURN COALESCE($1::bigint, $2);
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- --
- CREATE OR REPLACE FUNCTION IFNULL(bigint, bigint)
- RETURNS bigint AS $$
- BEGIN
- RETURN COALESCE($1, $2);
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- --
- CREATE OR REPLACE FUNCTION IFNULL(integer, integer)
- RETURNS integer AS $$
- BEGIN
- RETURN COALESCE($1, $2);
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- --
- CREATE OR REPLACE FUNCTION IFNULL(numeric, numeric)
- RETURNS numeric AS $$
- BEGIN
- RETURN COALESCE($1, $2);
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- --
- CREATE OR REPLACE FUNCTION IFNULL(text, text)
- RETURNS text AS $$
- BEGIN
- RETURN COALESCE($1, $2);
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- --
- CREATE OR REPLACE FUNCTION day(date_val DATE)
- RETURNS INTEGER AS $$ BEGIN RETURN EXTRACT(DAY FROM date_val)::INTEGER; END; $$ LANGUAGE plpgsql;
- --
- CREATE OR REPLACE FUNCTION day(date_val TIMESTAMP)
- RETURNS INTEGER AS $$ BEGIN RETURN EXTRACT(DAY FROM date_val)::INTEGER; END; $$ LANGUAGE plpgsql;
- --
- CREATE OR REPLACE FUNCTION day(date_val TIMESTAMPTZ)
- RETURNS INTEGER AS $$ BEGIN RETURN EXTRACT(DAY FROM date_val)::INTEGER; END; $$ LANGUAGE plpgsql;
- --
- CREATE OR REPLACE FUNCTION MONTH(date_val DATE)
- RETURNS INTEGER AS $$ BEGIN RETURN EXTRACT(MONTH FROM date_val)::INTEGER; END; $$ LANGUAGE plpgsql;
- --
- CREATE OR REPLACE FUNCTION MONTH(date_val TIMESTAMP)
- RETURNS INTEGER AS $$ BEGIN RETURN EXTRACT(MONTH FROM date_val)::INTEGER; END; $$ LANGUAGE plpgsql;
- --
- CREATE OR REPLACE FUNCTION MONTH(date_val TIMESTAMPTZ)
- RETURNS INTEGER AS $$ BEGIN RETURN EXTRACT(MONTH FROM date_val)::INTEGER; END; $$ LANGUAGE plpgsql;
- --
- CREATE OR REPLACE FUNCTION YEAR(date_val DATE)
- RETURNS INTEGER AS $$ BEGIN RETURN EXTRACT(YEAR FROM date_val)::INTEGER; END; $$ LANGUAGE plpgsql;
- --
- CREATE OR REPLACE FUNCTION YEAR(date_val TIMESTAMP)
- RETURNS INTEGER AS $$ BEGIN RETURN EXTRACT(YEAR FROM date_val)::INTEGER; END; $$ LANGUAGE plpgsql;
- --
- CREATE OR REPLACE FUNCTION YEAR(date_val TIMESTAMPTZ)
- RETURNS INTEGER AS $$ BEGIN RETURN EXTRACT(YEAR FROM date_val)::INTEGER; END; $$ LANGUAGE plpgsql;
- --
- CREATE OR REPLACE FUNCTION DATEDIFF(
- end_date ANYELEMENT,
- start_date ANYELEMENT
- ) RETURNS INTEGER AS $$
- BEGIN
- RETURN (end_date - start_date)::INTEGER;
- END;
- $$ LANGUAGE plpgsql;
- --
- CREATE OR REPLACE FUNCTION "IF"(
- condition BOOLEAN,
- true_val BOOLEAN,
- false_val BOOLEAN
- ) RETURNS BOOLEAN AS $$
- BEGIN
- IF condition THEN
- RETURN true_val;
- ELSE
- RETURN false_val;
- END IF;
- END;
- $$ LANGUAGE plpgsql;
- --
- CREATE OR REPLACE FUNCTION "IF"(
- condition BOOLEAN,
- true_val DOUBLE PRECISION,
- false_val INTEGER
- ) RETURNS DOUBLE PRECISION AS $$
- BEGIN
- IF condition THEN
- RETURN true_val;
- ELSE
- RETURN false_val::DOUBLE PRECISION;
- END IF;
- END;
- $$ LANGUAGE plpgsql;
- --
- CREATE OR REPLACE FUNCTION "IF"(
- condition BOOLEAN,
- true_val DOUBLE PRECISION,
- false_val DOUBLE PRECISION
- ) RETURNS DOUBLE PRECISION AS $$
- BEGIN
- IF condition THEN
- RETURN true_val;
- ELSE
- RETURN false_val;
- END IF;
- END;
- $$ LANGUAGE plpgsql;
- --
- CREATE OR REPLACE FUNCTION "IF"(
- condition BOOLEAN,
- true_val TEXT,
- false_val TEXT
- ) RETURNS TEXT AS $$
- BEGIN
- IF condition THEN
- RETURN true_val;
- ELSE
- RETURN false_val;
- END IF;
- END;
- $$ LANGUAGE plpgsql;
- --
- CREATE OR REPLACE FUNCTION "IF"(
- condition BOOLEAN,
- true_val INTEGER,
- false_val INTEGER
- ) RETURNS INTEGER AS $$
- BEGIN
- IF condition THEN
- RETURN true_val;
- ELSE
- RETURN false_val;
- END IF;
- END;
- $$ LANGUAGE plpgsql;
- --
- CREATE OR REPLACE FUNCTION "IF"(
- condition BOOLEAN,
- true_val TEXT,
- false_val DATE
- ) RETURNS DATE AS $$
- BEGIN
- IF condition THEN
- RETURN true_val;
- ELSE
- RETURN false_val::DATE;
- END IF;
- END;
- $$ LANGUAGE plpgsql;
- --
- CREATE OR REPLACE FUNCTION "IF"(
- condition BOOLEAN,
- true_val DATE,
- false_val DATE
- ) RETURNS DATE AS $$
- BEGIN
- IF condition THEN
- RETURN true_val;
- ELSE
- RETURN false_val;
- END IF;
- END;
- $$ LANGUAGE plpgsql;
- --
- CREATE OR REPLACE FUNCTION "IF"(
- condition BOOLEAN,
- true_val timestamp without time zone,
- false_val DATE
- ) RETURNS DATE AS $$
- BEGIN
- IF condition THEN
- RETURN true_val::DATE;
- ELSE
- RETURN false_val;
- END IF;
- END;
- $$ LANGUAGE plpgsql;
- --
- CREATE OR REPLACE FUNCTION "IF"(
- condition BOOLEAN,
- true_val timestamp without time zone,
- false_val timestamp without time zone
- ) RETURNS DATE AS $$
- BEGIN
- IF condition THEN
- RETURN true_val;
- ELSE
- RETURN false_val;
- END IF;
- END;
- $$ LANGUAGE plpgsql;
- --
- CREATE OR REPLACE FUNCTION DATE_FORMAT(
- date_val DATE,
- format_str TEXT
- ) RETURNS TEXT AS $$
- DECLARE
- pg_format TEXT;
- BEGIN
- pg_format := REPLACE(format_str, '%Y', 'YYYY');
- pg_format := REPLACE(pg_format, '%y', 'YY');
- pg_format := REPLACE(pg_format, '%m', 'MM');
- pg_format := REPLACE(pg_format, '%c', 'MM');
- pg_format := REPLACE(pg_format, '%d', 'DD');
- pg_format := REPLACE(pg_format, '%e', 'DD');
- pg_format := REPLACE(pg_format, '%H', 'HH24');
- pg_format := REPLACE(pg_format, '%h', 'HH12');
- pg_format := REPLACE(pg_format, '%i', 'MI');
- pg_format := REPLACE(pg_format, '%s', 'SS');
- pg_format := REPLACE(pg_format, '%W', 'Day');
- pg_format := REPLACE(pg_format, '%a', 'Dy');
- pg_format := REPLACE(pg_format, '%M', 'Month');
- pg_format := REPLACE(pg_format, '%b', 'Mon');
- RETURN TO_CHAR(date_val, pg_format);
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- --
- CREATE OR REPLACE FUNCTION instr(
- str TEXT,
- sub_str TEXT
- )
- RETURNS INTEGER AS $$
- BEGIN
- IF str IS NULL OR sub_str IS NULL OR sub_str = '' THEN
- RETURN 0;
- END IF;
- RETURN strpos(LOWER(str), LOWER(sub_str));
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- --
- CREATE OR REPLACE FUNCTION left(
- str TEXT,
- length INT
- )
- RETURNS TEXT AS $$
- BEGIN
- IF str IS NULL OR length IS NULL THEN
- RETURN NULL;
- END IF;
- IF length <= 0 THEN
- RETURN '';
- END IF;
- RETURN pg_catalog.left(str, length);
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- --
- CREATE OR REPLACE FUNCTION left(
- str DATE,
- length INT
- )
- RETURNS TEXT AS $$
- BEGIN
- RETURN left(str::TEXT, length);
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- --
- CREATE OR REPLACE FUNCTION left(
- str NUMERIC,
- length INT
- )
- RETURNS TEXT AS $$
- BEGIN
- RETURN left(str::TEXT, length);
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- --
- CREATE OR REPLACE FUNCTION left(
- str TIMESTAMP,
- length INT
- )
- RETURNS TEXT AS $$
- BEGIN
- RETURN left(str::TEXT, length);
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- --
- CREATE OR REPLACE FUNCTION date_format(
- input_date TIMESTAMP WITHOUT TIME ZONE,
- format_str TEXT
- ) RETURNS TEXT AS $$
- DECLARE
- mapped_format TEXT := format_str;
- BEGIN
- mapped_format := REPLACE(mapped_format, '%Y', 'YYYY');
- mapped_format := REPLACE(mapped_format, '%y', 'YY');
- mapped_format := REPLACE(mapped_format, '%m', 'MM');
- mapped_format := REPLACE(mapped_format, '%c', 'FM MM');
- mapped_format := REPLACE(mapped_format, '%d', 'DD');
- mapped_format := REPLACE(mapped_format, '%e', 'FM DD');
- mapped_format := REPLACE(mapped_format, '%H', 'HH24');
- mapped_format := REPLACE(mapped_format, '%h', 'HH12');
- mapped_format := REPLACE(mapped_format, '%i', 'MI');
- mapped_format := REPLACE(mapped_format, '%s', 'SS');
- mapped_format := REPLACE(mapped_format, '%W', 'Day');
- mapped_format := REPLACE(mapped_format, '%w', 'D');
- mapped_format := REPLACE(mapped_format, '%M', 'Month');
- mapped_format := REPLACE(mapped_format, '%b', 'Mon');
- mapped_format := REPLACE(mapped_format, '%p', 'AM');
- mapped_format := REPLACE(mapped_format, '%T', 'HH24:MI:SS');
- mapped_format := REPLACE(mapped_format, '%j', 'DDD');
- mapped_format := REPLACE(mapped_format, 'FM MM', 'FMMM');
- mapped_format := REPLACE(mapped_format, 'FM DD', 'FMDD');
- RETURN TO_CHAR(input_date, mapped_format);
- END;
- $$ LANGUAGE plpgsql IMMUTABLE;
- --
- CREATE OR REPLACE FUNCTION update_tables_seq ( )
- RETURNS void AS $$
- DECLARE
- seq_name_cursor CURSOR FOR
- SELECT a.attname AS column_name, c.relname AS table_name, s.relname AS seq_name
- FROM pg_class c
- JOIN pg_depend d ON d.refobjid = c.oid
- JOIN pg_class s ON d.objid = s.oid
- JOIN pg_namespace n ON s.relnamespace = n.oid
- JOIN pg_attribute a ON a.attrelid = c.oid AND a.attnum = d.refobjsubid
- WHERE d.classid = 'pg_class'::regclass
- AND d.refclassid = 'pg_class'::regclass
- AND s.relkind = 'S'
- AND n.nspname = 'public';
- prepared_sql VARCHAR(255);
- BEGIN
- FOR ref_record in seq_name_cursor LOOP
- prepared_sql := 'SELECT setval( ''' || ref_record.seq_name;
- prepared_sql := prepared_sql || ''','||'( SELECT MAX ( ' || ref_record.column_name || ' ) FROM "'||ref_record.table_name||'") );';
- RAISE NOTICE '%', prepared_sql;
- EXECUTE prepared_sql;
- END LOOP;
- END;
- $$ LANGUAGE plpgsql;
|