【发布时间】:2013-05-14 12:04:04
【问题描述】:
我有一个字符串,之前用 initcap() 处理过,我想把它的部分大写。
具体来说 - 我想将可能出现的基本罗马数字大写。
更具体地说,我想替换
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
【问题讨论】:
-
你是怎么解决这个问题的?在这一刻,我会做一个解决方法。抱歉@Stephan 没有为我确认您的答案,在我的系统中接受小写字母更容易
-
我没有。好像做不到。
-
感谢您的评论!这对后验性有好处。我想知道这在 Postgres 的最新版本中是否发生了变化。干杯
标签: regex uppercase psql backreference