4

我的表格如下:

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
}

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

4

1 回答 1

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_column两者length($order_by_column)都返回integer

有关手册中的对象标识符类型regtype的更多信息。

查找所有已注册的类型:

SELECT * from pg_type

再次,更多关于pg_type手册

于 2012-11-05T00:07:15.137 回答