Thread
-
Postgres View DDL
Sam Stearns <sam.stearns@dat.com> — 2024-10-16T21:33:37Z
Howdy, I have an Oracle view that's been converted for Postgres. This block of code in the Oracle view DDL: TO_NUMBER (NVL (REGEXP_REPLACE (broker_mc, '[^0-9]+', ''), 0)), TO_NUMBER (NVL (REGEXP_REPLACE (carrier_mc, '[^0-9]+', ''), 0)), TO_NUMBER (NVL (REGEXP_REPLACE (freight_forwarder_mc, '[^0-9]+', ''), 0)), has been converted for Postgres as: (coalesce(REGEXP_REPLACE(broker_mc, '[^0-9]+', '', 'g'), 0))::numeric , (coalesce(REGEXP_REPLACE(carrier_mc, '[^0-9]+', '', 'g'), 0))::numeric , (coalesce(REGEXP_REPLACE(freight_forwarder_mc, '[^0-9]+', '', 'g'), 0))::numeric , which is throwing the following error: ERROR: COALESCE types text and integer cannot be matched LINE 43: ...ce(REGEXP_REPLACE(broker_mc, '[^0-9]+', '', 'g'), 0))::numer... ^ I have been looking through: https://www.postgresql.org/docs/current/functions-conditional.html#FUNCTIONS-COALESCE-NVL-IFNULL https://www.postgresql.org/docs/current/typeconv-union-case.html but I'm not seeing a way to resolve it. Would anyone be able to advise how to correct this for Postgres, please? Thanks, Sam -- *Samuel Stearns* Lead Database Administrator *c:* 971 762 6879 | *o:* 503 672 5115 | DAT.com [image: DAT] <https://www.dat.com/?utm_medium=email&utm_source=DAT_email_signature_link> -
Re: Postgres View DDL
Sam Stearns <sam.stearns@dat.com> — 2024-10-16T21:42:28Z
Tried changing to this: (coalesce(REGEXP_REPLACE(broker_mc::numeric, '[^0-9]+', '', 'g'), 0)), (coalesce(REGEXP_REPLACE(carrier_mc::numeric, '[^0-9]+', '', 'g'), 0)), (coalesce(REGEXP_REPLACE(freight_forwarder_mc::numeric, '[^0-9]+', '', 'g'), 0)), but that throws this error: ERROR: function regexp_replace(numeric, unknown, unknown, unknown) does not exist LINE 46: (coalesce(REGEXP_REPLACE(broker_mc::numeric, '[^0-9]+', ... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. Sam On Wed, Oct 16, 2024 at 2:33 PM Sam Stearns <sam.stearns@dat.com> wrote: > Howdy, > > I have an Oracle view that's been converted for Postgres. This block of > code in the Oracle view DDL: > > TO_NUMBER (NVL (REGEXP_REPLACE (broker_mc, '[^0-9]+', ''), 0)), > TO_NUMBER (NVL (REGEXP_REPLACE (carrier_mc, '[^0-9]+', ''), 0)), > TO_NUMBER (NVL (REGEXP_REPLACE (freight_forwarder_mc, '[^0-9]+', ''), 0)), > > has been converted for Postgres as: > > (coalesce(REGEXP_REPLACE(broker_mc, '[^0-9]+', '', 'g'), 0))::numeric , > (coalesce(REGEXP_REPLACE(carrier_mc, '[^0-9]+', '', 'g'), 0))::numeric , > (coalesce(REGEXP_REPLACE(freight_forwarder_mc, '[^0-9]+', '', 'g'), > 0))::numeric , > > which is throwing the following error: > > ERROR: COALESCE types text and integer cannot be matched > LINE 43: ...ce(REGEXP_REPLACE(broker_mc, '[^0-9]+', '', 'g'), 0))::numer... > > ^ > I have been looking through: > > > https://www.postgresql.org/docs/current/functions-conditional.html#FUNCTIONS-COALESCE-NVL-IFNULL > https://www.postgresql.org/docs/current/typeconv-union-case.html > > but I'm not seeing a way to resolve it. Would anyone be able to advise > how to correct this for Postgres, please? > > Thanks, > > Sam > > -- > > *Samuel Stearns* > Lead Database Administrator > *c:* 971 762 6879 | *o:* 503 672 5115 | DAT.com > [image: DAT] > <https://www.dat.com/?utm_medium=email&utm_source=DAT_email_signature_link> > -- *Samuel Stearns* Lead Database Administrator *c:* 971 762 6879 | *o:* 503 672 5115 | DAT.com [image: DAT] <https://www.dat.com/?utm_medium=email&utm_source=DAT_email_signature_link> -
Re: Postgres View DDL
David G. Johnston <david.g.johnston@gmail.com> — 2024-10-16T21:47:27Z
On Wednesday, October 16, 2024, Sam Stearns <sam.stearns@dat.com> wrote: > Tried changing to this: > (coalesce(REGEXP_REPLACE(broker_mc::numeric, '[^0-9]+', '', 'g'), 0)), > Both parts of the coalesce need to be integer. Therefore: regexp_replace(…)::integer In short, the output of the text manipulation better be something that can be cast to integer if you want coalesce to produce an integer. David J.
-
Re: Postgres View DDL
William Alves Da Silva <william_silva@unochapeco.edu.br> — 2024-10-16T22:04:17Z
Hello Sam. I think you want this: SELECT COALESCE(regexp_replace('abc12345'::TEXT, '[^0-9]+', '', 'g')::NUMERIC, 0); The coalesce need the same type from origin field, or you cast the result from regex to interger/numeric etc, or you use cast ‘0’ instead of 0; Regards, William Alves. > On 16 Oct 2024, at 18:42, Sam Stearns <sam.stearns@dat.com> wrote: > > Tried changing to this: > > (coalesce(REGEXP_REPLACE(broker_mc::numeric, '[^0-9]+', '', 'g'), 0)), > (coalesce(REGEXP_REPLACE(carrier_mc::numeric, '[^0-9]+', '', 'g'), 0)), > (coalesce(REGEXP_REPLACE(freight_forwarder_mc::numeric, '[^0-9]+', '', 'g'), 0)), > > but that throws this error: > > ERROR: function regexp_replace(numeric, unknown, unknown, unknown) does not exist > LINE 46: (coalesce(REGEXP_REPLACE(broker_mc::numeric, '[^0-9]+', ... > ^ > HINT: No function matches the given name and argument types. You might need to add explicit type casts. > > Sam > > On Wed, Oct 16, 2024 at 2:33 PM Sam Stearns <sam.stearns@dat.com <mailto:sam.stearns@dat.com>> wrote: >> Howdy, >> >> I have an Oracle view that's been converted for Postgres. This block of code in the Oracle view DDL: >> >> TO_NUMBER (NVL (REGEXP_REPLACE (broker_mc, '[^0-9]+', ''), 0)), >> TO_NUMBER (NVL (REGEXP_REPLACE (carrier_mc, '[^0-9]+', ''), 0)), >> TO_NUMBER (NVL (REGEXP_REPLACE (freight_forwarder_mc, '[^0-9]+', ''), 0)), >> >> has been converted for Postgres as: >> >> (coalesce(REGEXP_REPLACE(broker_mc, '[^0-9]+', '', 'g'), 0))::numeric , >> (coalesce(REGEXP_REPLACE(carrier_mc, '[^0-9]+', '', 'g'), 0))::numeric , >> (coalesce(REGEXP_REPLACE(freight_forwarder_mc, '[^0-9]+', '', 'g'), 0))::numeric , >> >> which is throwing the following error: >> >> ERROR: COALESCE types text and integer cannot be matched >> LINE 43: ...ce(REGEXP_REPLACE(broker_mc, '[^0-9]+', '', 'g'), 0))::numer... >> ^ >> I have been looking through: >> >> https://www.postgresql.org/docs/current/functions-conditional.html#FUNCTIONS-COALESCE-NVL-IFNULL >> https://www.postgresql.org/docs/current/typeconv-union-case.html >> >> but I'm not seeing a way to resolve it. Would anyone be able to advise how to correct this for Postgres, please? >> >> Thanks, >> >> Sam >> >> -- >> Samuel Stearns >> Lead Database Administrator >> c: 971 762 6879 | o: 503 672 5115 | DAT.com >> >> <https://www.dat.com/?utm_medium=email&utm_source=DAT_email_signature_link> > > -- > Samuel Stearns > Lead Database Administrator > c: 971 762 6879 | o: 503 672 5115 | DAT.com > > <https://www.dat.com/?utm_medium=email&utm_source=DAT_email_signature_link> -
Re: Postgres View DDL
Sam Stearns <sam.stearns@dat.com> — 2024-10-16T23:07:29Z
Just adopting William's advice and changing to this: (coalesce(REGEXP_REPLACE(broker_mc::text, '[^0-9]+', '', 'g')::numeric, 0)), (coalesce(REGEXP_REPLACE(carrier_mc::text, '[^0-9]+', '', 'g')::numeric, 0)), (coalesce(REGEXP_REPLACE(freight_forwarder_mc::text, '[^0-9]+', '', 'g')::numeric, 0)), has resolved the problem. Thank you, William and David! Learning a lot here. Appreciate all the help. Sam On Wed, Oct 16, 2024 at 3:04 PM William Alves Da Silva < william_silva@unochapeco.edu.br> wrote: > Hello Sam. > > I think you want this: > > SELECT COALESCE(regexp_replace('abc12345'::TEXT, '[^0-9]+', '', > 'g')::NUMERIC, 0); > > The coalesce need the same type from origin field, or you cast the result > from regex to interger/numeric etc, or you use cast ‘0’ instead of 0; > > Regards, > William Alves. > > On 16 Oct 2024, at 18:42, Sam Stearns <sam.stearns@dat.com> wrote: > > Tried changing to this: > > (coalesce(REGEXP_REPLACE(broker_mc::numeric, '[^0-9]+', '', 'g'), 0)), > (coalesce(REGEXP_REPLACE(carrier_mc::numeric, '[^0-9]+', '', 'g'), 0)), > (coalesce(REGEXP_REPLACE(freight_forwarder_mc::numeric, '[^0-9]+', '', > 'g'), 0)), > > but that throws this error: > > ERROR: function regexp_replace(numeric, unknown, unknown, unknown) does > not exist > LINE 46: (coalesce(REGEXP_REPLACE(broker_mc::numeric, '[^0-9]+', ... > ^ > HINT: No function matches the given name and argument types. You might > need to add explicit type casts. > > Sam > > On Wed, Oct 16, 2024 at 2:33 PM Sam Stearns <sam.stearns@dat.com> wrote: > >> Howdy, >> >> I have an Oracle view that's been converted for Postgres. This block of >> code in the Oracle view DDL: >> >> TO_NUMBER (NVL (REGEXP_REPLACE (broker_mc, '[^0-9]+', ''), 0)), >> TO_NUMBER (NVL (REGEXP_REPLACE (carrier_mc, '[^0-9]+', ''), 0)), >> TO_NUMBER (NVL (REGEXP_REPLACE (freight_forwarder_mc, '[^0-9]+', ''), 0)), >> >> has been converted for Postgres as: >> >> (coalesce(REGEXP_REPLACE(broker_mc, '[^0-9]+', '', 'g'), 0))::numeric , >> (coalesce(REGEXP_REPLACE(carrier_mc, '[^0-9]+', '', 'g'), 0))::numeric , >> (coalesce(REGEXP_REPLACE(freight_forwarder_mc, '[^0-9]+', '', 'g'), >> 0))::numeric , >> >> which is throwing the following error: >> >> ERROR: COALESCE types text and integer cannot be matched >> LINE 43: ...ce(REGEXP_REPLACE(broker_mc, '[^0-9]+', '', 'g'), >> 0))::numer... >> >> ^ >> I have been looking through: >> >> >> https://www.postgresql.org/docs/current/functions-conditional.html#FUNCTIONS-COALESCE-NVL-IFNULL >> https://www.postgresql.org/docs/current/typeconv-union-case.html >> >> but I'm not seeing a way to resolve it. Would anyone be able to advise >> how to correct this for Postgres, please? >> >> Thanks, >> >> Sam >> >> -- >> >> *Samuel Stearns* >> Lead Database Administrator >> *c:* 971 762 6879 | *o:* 503 672 5115 | DAT.com >> [image: DAT] >> <https://www.dat.com/?utm_medium=email&utm_source=DAT_email_signature_link> >> > > > -- > > *Samuel Stearns* > Lead Database Administrator > *c:* 971 762 6879 | *o:* 503 672 5115 | DAT.com > [image: DAT] > <https://www.dat.com/?utm_medium=email&utm_source=DAT_email_signature_link> > > > -- *Samuel Stearns* Lead Database Administrator *c:* 971 762 6879 | *o:* 503 672 5115 | DAT.com [image: DAT] <https://www.dat.com/?utm_medium=email&utm_source=DAT_email_signature_link>