3

以前に 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

4

1 に答える 1