gpt4 book ai didi

ruby-on-rails - 使用正则表达式的高级 Active Record 顺序

转载 作者:太空宇宙 更新时间:2023-11-03 17:21:16 25 4
gpt4 key购买 nike

我正在尝试查询我的订单模型以获取所有记录,但我希望它们以非常具体的方式排序。

数据库是 PostgreSQL 数据库。

我想要所有以 NY 开头的记录,然后是 NYN,然后是所有剩余的记录。

我想我正在尝试做这样的事情:

Order.all.order('order_number /^NY/, /^NYN/')

数据示例:

NY-1111111
NYN-1234567
P-000000
P0000000
SS0232131
NYN16151202

我想要的顺序是:

NY-1111111
NYN16151202
NYN-1234567
P0000000
P-000000
SS0232131

最佳答案

这是您可以在 SQL 中执行此操作的一种方法:

SELECT * FROM orders
ORDER BY
CASE
WHEN order_number LIKE 'NYN%' THEN 1
WHEN order_number LIKE 'NY%' THEN 0
ELSE 2
END,
order_number;

这可以直接转换为 ActiveRecord 查询:

Order.order("
CASE
WHEN order_number LIKE 'NYN%' THEN 1
WHEN order_number LIKE 'NY%' THEN 0
ELSE 2
END,
order_number
")

这是使用 PostgreSQL 的 POSIX 正则表达式的另一种可能性。我不确定它与上述性能相比如何:

Order.order("
CASE SUBSTRING(order_number FROM '^NYN?')
WHEN 'NY' THEN 0
WHEN 'NYN' THEN 1
ELSE 2
END,
order_number
")

关于ruby-on-rails - 使用正则表达式的高级 Active Record 顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38381536/

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