PostgreSQL 中的重音敏感排序

问题描述 投票:0回答:1

如何在 PostgreSQL 中按拉脱维亚语字母顺序对文本进行排序,以便任何不带重音的字母始终位于带重音的字母之前?

比如这个

select * from (
    select 'bā' as name
    union select 'āa'
    union select 'ac'
    union select 'Āb'
    union select 'Ā'
) t
order by name COLLATE "lv-x-icu"

回归

Ā āa Āb ac bā

但是预期的结果是

ac Ā āa Āb bā

我尝试创建一些自定义排序规则,但没有一个返回预期结果。

postgresql sql-order-by collation alphabetical-sort accent-sensitive
1个回答
0
投票

您可以将

order by
case
子句结合使用 :

select * from (
    select 'bā' as name
    union select 'āa'
    union select 'ac'
    union select 'Āb'
    union select 'Ā'
) t
order by case when name ~ '[[:ascii:]]' then 0 else 1 end, name
© www.soinside.com 2019 - 2024. All rights reserved.