PostgreSQL:
CREATE OR REPLACE FUNCTION DateDiff (units VARCHAR(30), start_t TIMESTAMP, end_t TIMESTAMP)
RETURNS INT AS $$
DECLARE
diff_interval INTERVAL;
diff INT = 0;
years_diff INT = 0;
BEGIN
IF units IN ('yy', 'yyyy', 'year', 'mm', 'm', 'month') THEN
years_diff = DATE_PART('year', end_t) - DATE_PART('year', start_t);
IF units IN ('yy', 'yyyy', 'year') THEN
-- SQL Server does not count full years passed (only difference between year parts)
RETURN years_diff;
ELSE
-- If end month is less than start month it will subtracted
RETURN years_diff * 12 + (DATE_PART('month', end_t) - DATE_PART('month', start_t));
END IF;
END IF;
-- Minus operator returns interval 'DDD days HH:MI:SS'
diff_interval = end_t - start_t;
diff = diff + DATE_PART('day', diff_interval);
IF units IN ('wk', 'ww', 'week') THEN
diff = diff/7;
RETURN diff;
END IF;
IF units IN ('dd', 'd', 'day') THEN
RETURN diff;
END IF;
diff = diff * 24 + DATE_PART('hour', diff_interval);
IF units IN ('hh', 'hour') THEN
RETURN diff;
END IF;
diff = diff * 60 + DATE_PART('minute', diff_interval);
IF units IN ('mi', 'n', 'minute') THEN
RETURN diff;
END IF;
diff = diff * 60 + DATE_PART('second', diff_interval);
RETURN diff;
END;
$$ LANGUAGE plpgsql;
How to Use PostgreSQL DATEDIFF Function
The syntax is similar to SQL
Server DATEDIFF, but you have to specify a time unit (second, minute
etc. and their abbreviations) as a string literal in PostgreSQL, for
example:
-- Difference between Dec 30, 2011 08:54:55 and Dec 30, 2011 08:56:10 in seconds SELECT DATEDIFF('second', '2011-12-30 08:54:55'::timestamp, '2011-12-30 08:56:10'::timestamp); -- Result: 75
PostgreSQL DATEDIFF Function for TIME Only
You can have another function that operates on time data types only.
PostgreSQL supports overloaded functions having the same name, but
different data types of parameters:
CREATE OR REPLACE FUNCTION DateDiff (units VARCHAR(30), start_t TIME, end_t TIME) RETURNS INT AS $$ DECLARE diff_interval INTERVAL; diff INT = 0; BEGIN -- Minus operator for TIME returns interval 'HH:MI:SS' diff_interval = end_t - start_t; diff = DATE_PART('hour', diff_interval); IF units IN ('hh', 'hour') THEN RETURN diff; END IF; diff = diff * 60 + DATE_PART('minute', diff_interval); IF units IN ('mi', 'n', 'minute') THEN RETURN diff; END IF; diff = diff * 60 + DATE_PART('second', diff_interval); RETURN diff; END; $$ LANGUAGE plpgsql;
For example, you can call this function as:
-- Difference between 08:54:55 and 08:56:10 in seconds SELECT DATEDIFF('second', '08:54:55'::time, '08:56:10'::time); -- Result: 75
Link:
http://www.sqlines.com/postgresql/how-to/datediff
Great information shared by you! Students who are searching for online graphic design courses in hindi will check Subhe eLearning provides one of the best Graphic design and video editing courses in India with studio-recorded videos, live workshops, and cohort-based practical oriented pedagogy with dedicated mentorship. Online learning sites in india provide the students a chance to learn the best online graphic design courses from industry experts and trainers along with One-to-One Sessions, practical learning, placements training, and 100% internship placements.
ResponderEliminar