ORDER BY取决于列类型

eri*_*bae 4 sql postgresql types

我的表格如下:

a | b
-----
1 | a
2 | b 
Run Code Online (Sandbox Code Playgroud)

在我的查询中,我想根据列的类型更改order by子句.

所以像

get_data($order_by_column) {

  ....
  ORDER BY
    CASE 
      WHEN is_numeric($order_by_column) THEN $order_by_column
      ELSE CHAR_LENGTH($order_by_column)
    END
}
Run Code Online (Sandbox Code Playgroud)

我已经检查过,似乎很难像上面的查询一样动态确定列类型.实现这一目标的替代方案(或替代方案)是什么?

Erw*_*ter 10

您可能对以下内容感兴趣pg_typeof():

ORDER BY
   CASE pg_typeof($order_by_column)
      WHEN 'integer'::regtype THEN $order_by_column
--    WHEN 'text'::regtype THEN ...
--    WHEN 'boolean'::regtype THEN ...
      ELSE length($order_by_column)
   END
Run Code Online (Sandbox Code Playgroud)

请注意,两腿CASE声明需要返回类型匹配,这恰好是这里的情况,因为$order_by_columnlength($order_by_column)这两个回报integer.

更多关于对象标识符类型,如regtype在手册中.

查找所有注册类型:

SELECT * from pg_type
Run Code Online (Sandbox Code Playgroud)

再次,更多关于pg_type手册.