Postgres INTERVAL using value from table

后端 未结 3 1308
余生分开走
余生分开走 2020-12-18 14:00

If I want to add 5 days to a date, I can do it using the INTERVAL function:

select create_ts + interval \'5 days\' from abc_company;
         


        
3条回答
  •  一向
    一向 (楼主)
    2020-12-18 14:11

    here is a function that I use:

    CREATE OR REPLACE FUNCTION DateAdd(diffType varchar(15), incrementValue int, inputDate timestamp) RETURNS timestamp AS $$
    DECLARE
       YEAR_CONST Char(15) := 'year';
       MONTH_CONST Char(15) := 'month';
       WEEK_CONST Char(15) := 'week';
       DAY_CONST Char(15) := 'day';
       HOUR_CONST Char(15) := 'hour';
    
       dateTemp timestamp;
       intervals interval;
    BEGIN
        IF lower($1) = lower(YEAR_CONST) THEN
            select cast(cast(incrementvalue as character varying) || ' year' as interval) into intervals;
        ELSEIF lower($1) = lower(MONTH_CONST) THEN
            select cast(cast(incrementvalue as character varying) || ' months' as interval) into intervals;
        ELSEIF lower($1) = lower(DAY_CONST) THEN
            select cast(cast(incrementvalue as character varying) || ' day' as interval) into intervals;
        ELSEIF lower($1) = lower(WEEK_CONST) THEN
            select cast(cast(incrementvalue as character varying) || ' week' as interval) into intervals;
        ELSEIF lower($1) = lower(HOUR_CONST) THEN
            select cast(cast(incrementvalue as character varying) || ' hour' as interval) into intervals;
        END IF;
    
       dateTemp := inputdate + intervals;
    
       RETURN dateTemp;
    END;
    $$ LANGUAGE plpgsql;
    

    Used like so:

    select dateadd('day', 3, current_timestamp);
    

    It supports adding years, months, weeks, days, hours. More support could be added

提交回复
热议问题