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_columnlength($order_by_column)integer

マニュアルのようなオブジェクト識別子の種類のregtype詳細。

登録されているすべてのタイプを検索します。

SELECT * from pg_type

繰り返しますが、詳細についてpg_typeはマニュアルを参照してください。

于 2012-11-05T00:07:15.137 に答える