Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 带有Postgres子字符串的EXTO查询片段_Postgresql_Elixir_Ecto - Fatal编程技术网

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排序