Declare variable from other variable

Started by Raul Kaubiabout 6 years ago6 messagesgeneral
Jump to latest
#1Raul Kaubi
raulkaubi@gmail.com

Hi

PostgreSQL 12.1

How can I declare another variable from another variable.
Basically from oracle, I can just:

var1 := 'asda'||var2;

In postgres, I have the following example, I would like to use variable j
to add number of months there.

" interval 'j month')::date; "

DO $$

DECLARE
v_var integer := 1;
v_from_date date;
BEGIN
for j in 0..v_var LOOP
v_from_date := (date_trunc('month',current_date) + interval 'j
month')::date;
RAISE NOTICE '%', v_from_date;
END LOOP;
END;
$$ LANGUAGE plpgsql;

ERROR: invalid input syntax for type interval: "j month"
LINE 1: ...LECT (date_trunc('month',current_date) + interval 'j month')...

Raul

#2Yasin Sari
yasinsari81@googlemail.com
In reply to: Raul Kaubi (#1)
Re: Declare variable from other variable

On Wed, Feb 5, 2020 at 2:22 PM Raul Kaubi <raulkaubi@gmail.com> wrote:

DO $$

DECLARE
v_var integer := 1;
v_from_date date;
BEGIN
for j in 0..v_var LOOP
v_from_date := (date_trunc('month',current_date) + interval 'j
month')::date;
RAISE NOTICE '%', v_from_date;
END LOOP;
END;
$$ LANGUAGE plpgsql;

ERROR: invalid input syntax for type interval: "j month"
LINE 1: ...LECT (date_trunc('month',current_date) + interval 'j
month')...

If you replace red line with this one it will work:

v_from_date := (date_trunc('month',current_date) + interval '1
month'*j)::date;

#3Thomas Kellerer
shammat@gmx.net
In reply to: Raul Kaubi (#1)
Re: Declare variable from other variable

Raul Kaubi schrieb am 05.02.2020 um 12:21:

How can I declare another variable from another variable.
Basically from oracle, I can just: 

var1 := 'asda'||var2;

In postgres, I have the following example, I would like to use variable j to add number of months there.

" interval 'j month')::date; "

DO $$
DECLARE
v_var integer := 1;
v_from_date date;
BEGIN
for j in 0..v_var LOOP
v_from_date := (date_trunc('month',current_date) + interval 'j month')::date;
RAISE NOTICE '%', v_from_date;
END LOOP;
END;
$$ LANGUAGE plpgsql;

The easiest way is to use make_interval()

v_from_date := (date_trunc('month',current_date) + make_interval(months => j))::date;

But it sounds as if generate_series() is what you are really looking for.

#4Raul Kaubi
raulkaubi@gmail.com
In reply to: Yasin Sari (#2)
Re: Declare variable from other variable

Thanks, it worked!

By the way, what does this "**j"* mean there..? (this does not mean
multiply there?)

And what if, I would like to declare v_to_date also, so that v_to_date is
always + 1 month compared to v_date_from..?

-- This one will work, but can this be done simpler..?
v_to_date := (date_trunc('month',current_date)::date + interval '1 month' +
interval '1 month'*j)::date;

Raul

Kontakt Yasin Sari (<yasinsari81@googlemail.com>) kirjutas kuupäeval K, 5.
veebruar 2020 kell 14:28:

Show quoted text

On Wed, Feb 5, 2020 at 2:22 PM Raul Kaubi <raulkaubi@gmail.com> wrote:

DO $$

DECLARE
v_var integer := 1;
v_from_date date;
BEGIN
for j in 0..v_var LOOP
v_from_date := (date_trunc('month',current_date) + interval 'j
month')::date;
RAISE NOTICE '%', v_from_date;
END LOOP;
END;
$$ LANGUAGE plpgsql;

ERROR: invalid input syntax for type interval: "j month"
LINE 1: ...LECT (date_trunc('month',current_date) + interval 'j
month')...

If you replace red line with this one it will work:

v_from_date := (date_trunc('month',current_date) + interval '1
month'*j)::date;

In reply to: Raul Kaubi (#4)
Re: Declare variable from other variable

On Wed, Feb 05, 2020 at 02:42:42PM +0200, Raul Kaubi wrote:

Thanks, it worked!

By the way, what does this "**j"* mean there..? (this does not mean
multiply there?)

it's normal multiplication.

Your "j" variable is integer.

So, '1 month'::interval * j is some number of months.

And what if, I would like to declare v_to_date also, so that v_to_date is
always + 1 month compared to v_date_from..?

v_to_date := v_from_date + '1 month'::interval; ?

Best regards,

depesz

#6Raul Kaubi
raulkaubi@gmail.com
In reply to: hubert depesz lubaczewski (#5)
Re: Declare variable from other variable

Makes sense yeah.

Thanks for both of your help.

Raul

Kontakt hubert depesz lubaczewski (<depesz@depesz.com>) kirjutas kuupäeval
K, 5. veebruar 2020 kell 14:50:

Show quoted text

On Wed, Feb 05, 2020 at 02:42:42PM +0200, Raul Kaubi wrote:

Thanks, it worked!

By the way, what does this "**j"* mean there..? (this does not mean
multiply there?)

it's normal multiplication.

Your "j" variable is integer.

So, '1 month'::interval * j is some number of months.

And what if, I would like to declare v_to_date also, so that v_to_date is
always + 1 month compared to v_date_from..?

v_to_date := v_from_date + '1 month'::interval; ?

Best regards,

depesz