PostgreSQL how to concat interval value '2 days'

前端 未结 2 1382
抹茶落季
抹茶落季 2020-12-03 14:29

In PostgreSQL I want to concat the current_timestamp with an interval as follows:

select current_timestamp + interval 2||\' days\'
         


        
相关标签:
2条回答
  • 2020-12-03 14:54

    Please try this syntax:

    select current_timestamp + ( 2 || ' days')::interval;
    

    or even this one:

    select current_timestamp + 2 * interval '1 day';
    
    0 讨论(0)
  • 2020-12-03 14:55

    Part of the problem is that the standard SQL expression for intervals quotes the number, but not the keywords. So you have to be careful.

    select current_date, current_date + interval '2' day;
    --
    2012-02-21   2012-02-23 00:00:00
    

    In PostgreSQL, quoting like '2 day' and '2 days' also works. So you might think that '2' || ' days' would be equivalent, but it's not.

    select current_date, current_date + interval '2' || ' days';
    --
    2012-02-21   2012-02-21 00:00:02 days
    

    The solution, as A.H. said, is to cast the result string as an interval.

    You can also use a variable in place of 2. This generates a calendar for 2012.

    -- 0 to 365 is 366 days; 2012 is a leap year.
    select ('2012-01-01'::date + (n || ' days')::interval)::date calendar_date
    from generate_series(0, 365) n;
    

    I use that final cast to date, because date + interval returns a timestamp.

    0 讨论(0)
提交回复
热议问题