gpt4 book ai didi

ruby-on-rails - Postgres 仅排序字母数字

转载 作者:行者123 更新时间:2023-11-29 12:58:59 27 4
gpt4 key购买 nike

尝试对某些播客标题按 A->Z 降序排序,我只想要 A-Z 和 0-9,其他所有内容都应排在最后:

.order('title ASC')  

在开始和结束时给我奇怪的结果。中间的大部分结果都很好:

> ["\"Success Living\" - Dr. Leigh-Davis",
"\"The Real Deal\" with Dr. Leigh-Davis",
"#WeThePeople_Live",
"Alley Oop podcast",
"Always Listening: Podcast Reviews",
... ### everything here is fine ### ...
"Your Mom's House",
"Zen Dude Fitness",
"podCast411",
"talk2Cleo"]

(前三个,后两个是奇数。)

最佳答案

用这个更长的参数替换 .order('title ASC'):

.order("
CASE WHEN lower(title) BETWEEN 'a' AND 'zzzzz'
OR title BETWEEN '0' AND '99999'
THEN lower(title)
ELSE concat('zzzzz', lower(title))
END")

这将不区分大小写排序(lower);当值以数字或字母开头时,它们会正常排序,所有其他值将被排序,就好像它们以“zzzzz”为前缀一样,强制它们排在排序顺序的末尾。

演示在 SQL Fiddle

使用正则表达式

此解决方案结合了上述想法和 PJSCopeland 的想法(使用正则表达式)。同样,以非字母数字字符开头的字符串排在以字母数字字符开头的字符串之后:

.order("regexp_replace(lower(title), '([^[:alnum:] ])', 'zzz\1', 'gi')")

\1 向后引用匹配的非字母数字字符,因此它们都以 zzz 为前缀。

演示在 SQL Fiddle

关于ruby-on-rails - Postgres 仅排序字母数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35325931/

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