Postgresql 带有Postgres子字符串的EXTO查询片段
场景Postgresql 带有Postgres子字符串的EXTO查询片段,postgresql,elixir,ecto,Postgresql,Elixir,Ecto,场景 我需要对数据库中的顺序进行字母排序,然后是数字排序。 因此,顺序应该像[“A”、“B”、“C”、“1”、“2”、“3”] 博士后 这似乎奏效了。我试过了 WITH x(t) AS ( VALUES ('a') ,('3') ,('2') ,('1') ,('c') ,('b') ) SELECT t FROM x ORDER BY ( substring(t, '^[A-Za-z].*'), -- cast
我需要对数据库中的顺序进行字母排序,然后是数字排序。
因此,顺序应该像
[“A”、“B”、“C”、“1”、“2”、“3”]
博士后这似乎奏效了。我试过了
WITH x(t) AS (
VALUES
('a')
,('3')
,('2')
,('1')
,('c')
,('b')
)
SELECT t
FROM x
ORDER BY (
substring(t, '^[A-Za-z].*'), -- cast to integer
substring(t, '[^0-9_].*$')) -- works as text
我正在使用EXTO,据我所知,为了向数据库发送命令,您需要使用它。所以我写了这个
在体外循环中
def alphabetical(query) do
from c in query, order_by: [fragment("substring(?, ?)", c.name, '^[A-Za-z].*'), fragment("substring(?, ?)", c.name, '[^0-9_].*$')]
end
错误我在应用程序中遇到此错误
ERROR 42883 (undefined_function): function pg_catalog.substring(character varying, integer[]) does not exist
回答用EXTO编写并使用片段
def alphabetical(query) do
from c in query, order_by: [fragment("? < 'a'", c.name)]
end
def字母顺序(查询)do
从查询中的c开始,按以下顺序排列:[片段(“?<'a'”,c.name)]
结束
您的查询似乎不正确。试试这个简单的方法:
SELECT t
FROM x
ORDER BY t < 'a', t
选择t
从x
按t<'a',t排序