以前に initcap() で処理された文字列があり、その一部を大文字にしたいです。
具体的には、発生する可能性のある基本的なローマ数字を大文字にしたいと考えています。
さらに具体的に言うと、私は置き換えたい
Jana Iii Sobieskiego
に
Jana III Sobieskiego
私はそれを達成するために何らかの種類の上位部分文字列とサブクエリの組み合わせを使用できると思いますが、次のように単一の regexp_replace で機能させようとしています:
SELECT
ulica
--, regexp_matches(ulica , '((^|\s)([XxIiVv]+)(\s|$))', 'g')
, regexp_replace(ulica, '((^|\s)([XxIiVv]+)(\s|$))', '\2'||upper('q\3q')||'\4' , 'g')
FROM (
SELECT unnest(ARRAY['Jana Iii Sobieskiego', 'Xx Lecia', 'Xxx Lecia Panowania Zygmunta Iii Wazy'])::text AS ulica
) AS src
何が起こるかというと、upper は置換文字列 (q...q) の「静的」部分では機能しますが、後方参照では機能しません。
私は得る
Jana QIiiQ Sobieskiego
誰でもこれを行う方法を知っていますか?
PostgreSQL 9.1