如何在 postgresql 11 中使用 inticap 并在大写字母中保留最后一部分

How to use inticap and leave last part in capital letter in postgresql 11

我有一个 table,地址全部为大写,但我试图将其格式化为:

145 WELLBEING STREET, PARADE, 伦敦, PP1 5PP

145 Wellbeing Street, Parade, London, PP1 5PP

我该如何使用它?我试过了,用 initcap:

全部转换
UPDATE address_table
SET field_address = initcap(field_address)

然后它选择最后一块并将其转换为大写:

UPDATE address_table
SET field_address = upper(regexp_replace(field_address , '^.*,', ''))

所以我想在 concatenate 中,但我仍然在 initcap 中有最后一块...

我也试过 :

SELECT field_address || upper(trim(reverse(split_part(reverse(field_address ), ',', 1)))) FROM address_table

但我得到的结果是

Southridge, Newbury Hill, Hampstead Norreys, Thatcham, Rg18 0trRG18 0TR

如何删除最后一个逗号后的最后一部分以将其转换为大写?

来自 Postgres 14 :

UPDATE address_table
   SET field_address = initcap(replace(field_address, split_part(field_address, ',', -1), '')) || split_part(field_address, ',', -1)

来自 Postgres 10 :

UPDATE address_table
   SET field_address = initcap(regexp_replace(field_address, '[^,]+$', '')) || (regexp_match(field_address, '[^,]+$'))[1]

查看dbfiddle中的测试结果。