Guest User

Untitled

a guest
Oct 22nd, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 2.31 KB | None | 0 0
  1. -- Remember you need run this as two seperate statements.  First delimiter, then the rest.
  2.  
  3. DELIMITER //;
  4.  
  5. CREATE PROCEDURE make_intervals(startdate TIMESTAMP, enddate TIMESTAMP, intval INTEGER, unitval VARCHAR(10))
  6. BEGIN
  7. -- *************************************************************************
  8. -- Procedure: make_intervals()
  9. --    Author: Ron Savage
  10. --      Date: 02/03/2009
  11. --
  12. -- Description:
  13. -- This procedure creates a temporary table named time_intervals with the
  14. -- interval_start and interval_end fields specifed from the startdate and
  15. -- enddate arguments, at intervals of intval (unitval) size.
  16. -- *************************************************************************
  17.    DECLARE thisDate TIMESTAMP;
  18.    DECLARE nextDate TIMESTAMP;
  19.    SET thisDate = startdate;
  20.  
  21.    -- *************************************************************************
  22.    -- Drop / create the temp table
  23.    -- *************************************************************************
  24.    DROP TEMPORARY TABLE IF EXISTS time_intervals;
  25.    CREATE TEMPORARY TABLE IF NOT EXISTS time_intervals
  26.       (
  27.       interval_start TIMESTAMP,
  28.       interval_end TIMESTAMP
  29.       );
  30.  
  31.    -- *************************************************************************
  32.    -- Loop through the startdate adding each intval interval until enddate
  33.    -- *************************************************************************
  34.    repeat
  35.       SELECT
  36.          CASE unitval
  37.             WHEN 'MICROSECOND' THEN timestampadd(MICROSECOND, intval, thisDate)
  38.             WHEN 'SECOND'      THEN timestampadd(SECOND, intval, thisDate)
  39.             WHEN 'MINUTE'      THEN timestampadd(MINUTE, intval, thisDate)
  40.             WHEN 'HOUR'        THEN timestampadd(HOUR, intval, thisDate)
  41.             WHEN 'DAY'         THEN timestampadd(DAY, intval, thisDate)
  42.             WHEN 'WEEK'        THEN timestampadd(WEEK, intval, thisDate)
  43.             WHEN 'MONTH'       THEN timestampadd(MONTH, intval, thisDate)
  44.             WHEN 'QUARTER'     THEN timestampadd(QUARTER, intval, thisDate)
  45.             WHEN 'YEAR'        THEN timestampadd(YEAR, intval, thisDate)
  46.          END INTO nextDate;
  47.  
  48.       INSERT INTO time_intervals SELECT thisDate, timestampadd(MICROSECOND, -1, nextDate);
  49.       SET thisDate = nextDate;
  50.    until thisDate >= enddate
  51.    END repeat;
  52.  
  53.  END//
Add Comment
Please, Sign In to add comment