使用正则表达式的 Postgresql 子串

Postgresql substring using regex

我需要 运行 一个 postgresql 查询来从数据库中获取名字,但我需要按字母顺序对这些名字进行排序。 我从数据库中获取的名称如下:

(123) Jone Lee
(22) Hans Hee
2 Dean Alloni
Alen Khan

我需要输出为

Alen Khan
2 Dean Alloni
(22) Hans Hee
(123) Jone Lee

我尝试了以下 psql 查询:

select name from table order by substring(name, E'\W+\ +(.*)');
select name from table order by substring(name, E'\(?\w+?\)?\ +?(.*)');

我的问题如果名字是Alen Khan,它只是return Khan,所以我得到:

Khan
Dean Alloni
Hans Hee
Jone Lee

如有任何帮助,我们将不胜感激,

亲切的问候

select name 
from table 
order by substring(name, E'[a-zA-Z]+')

根据 OP 的评论进行编辑

select name
from table order by regexp_replace(name, '[^a-zA-Z]', '', 'g')

这将按字符串最后一个词排序

 select name from table 
 order by (string_to_array(trim(name),' '))[ array_upper(string_to_array(trim(name),' '),1)  ]