From: | William Alves Da Silva <william_silva(at)unochapeco(dot)edu(dot)br> |
---|---|
To: | Sam Stearns <sam(dot)stearns(at)dat(dot)com> |
Cc: | pgsql-sql <pgsql-sql(at)lists(dot)postgresql(dot)org> |
Subject: | Re: Postgres View DDL |
Date: | 2024-10-16 22:04:17 |
Message-ID: | 769A131E-D425-4BEA-B48E-E9E17F53DAD2@unochapeco.edu.br |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
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(dot)stearns(at)dat(dot)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(dot)stearns(at)dat(dot)com <mailto:sam(dot)stearns(at)dat(dot)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>
From | Date | Subject | |
---|---|---|---|
Next Message | Sam Stearns | 2024-10-16 23:07:29 | Re: Postgres View DDL |
Previous Message | David G. Johnston | 2024-10-16 21:47:27 | Re: Postgres View DDL |