ORDER BY取决于列类型

时间:2012-11-04 23:43:07

标签: sql postgresql types

我的表格如下:

a | b
-----
1 | a
2 | b 

在我的查询中,我想根据列的类型更改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
}

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

1 个答案:

答案 0 :(得分: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

请注意,CASE语句的分支需要返回匹配类型,这恰好是这里的情况,因为$order_by_columnlength($order_by_column)都返回integer。< / p>

有关object identifier types like regtype in the manual的更多信息。

查找所有已注册的类型:

SELECT * from pg_type

再次,更多关于pg_type in the manual