gpt4 book ai didi

postgresql - 如何按 A a-Z z- 符号排序

转载 作者:行者123 更新时间:2023-11-29 14:31:54 24 4
gpt4 key购买 nike

我想返回:Aa-Zz-符号(如:“,1,2,3,+,-)

query.order_by(sqlalchemy.asc(getattr(schema.Study, name)))

它返回:符号-Aa-Zz

例子:

学习 table :

| 16SYB  | 
| "test" |
| a |
| z |

我想回来:

a
z
"test"
16SYB

但是我的代码返回:

"test"
16SYB
a
z

最佳答案

您可以使用 collation 来处理大写字母顺序,例如:

t=# with c(v) as (values('16SYB'),('"test"'),('a'),('z'),('A'))
select v from c order by v collate "en_US.utf8";
v
--------
16SYB
a
A
"test"
z
(5 rows)

对比:

t=# with c(v) as (values('16SYB'),('"test"'),('a'),('z'),('A'))
select v from c order by v collate "C";
v
--------
"test"
16SYB
A
a
z
(5 rows)

但在你的情况下它有点复杂:

t=# with c(v) as (values('16SYB'),('"test"'),('a'),('z'),('A'))
select v from c order by case when v ~ '\d' then 9 when v ~ '"' then 8 else 0 end, v collate "en_US.utf8";
v
--------
a
A
z
"test"
16SYB
(5 rows)

当然你可以自己玩弄这个排序规则来扩展或改变它

更新我提出的方法不使用 sqlalchemy 方法。我想你需要 use raw sql按照我的建议实现它。

更新2

正如 Ilja Everilä 的善意提议,这应该有助于:

col = getattr(schema.Study, name)
query.order_by(case([(col.op('~')(r'\d'), 9),
(col.op('~')('"'), 8)],
else_=0),
col.collate('en_US.utf8'))

抱歉我的无知 - 由于完全缺乏 sqlalchemy 知识,我无法检查

关于postgresql - 如何按 A a-Z z- 符号排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50506864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com