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_column和length($order_by_column)这两个回报integer.
更多关于对象标识符类型,如regtype在手册中.
查找所有注册类型:
SELECT * from pg_type
Run Code Online (Sandbox Code Playgroud)
再次,更多关于pg_type手册.