テーブルから*を選択し、単一の名前付き列でいくつかの機能を実行します
質問
テーブルまたは結合の結果のテーブルのすべての列を返すことができ、それでも名前によって日付を文字列に変換できるようにしたいです。
たとえば
ID、DESCRIPTION、TO_CHAR(CHANGE_DATE、 'YYYY-MM-DD HH24:MI:SS')AS FORMATED_DATE FROM MY_TABLE;を選択します。
これは、これらの3つの列のみに適しています。ただし、テーブルには実際にはさらに多くの列があり、他のテーブルに結合される場合があります。ワイルドカードを使用してすべての列を取得し、それでもTO_CHAR変換を実行できるようにします。
次のようなもの: SELECT *、(CHANGE_DATE、 'YYYY-MM-DD HH24:MI:SS')AS FORMATED_DATE FROM MY_TABLE;
TO_CHARから推測したとおり、私はOracleを使用しているため、PLSQLを使用しています。
だから私の特定の質問は次のとおりです。すべての列を(*を介して)選択し、それらの列内の単一の列で関数を呼び出すことができる構文があります。
解決
最も近い方法は次のようなものです:
SELECT
MY_TABLE.*,
(CHANGE_DATE, 'YYYY-MM-DD HH24:MI:SS') AS FORMATED_DATE
FROM MY_TABLE;
他のヒント
説明するのではなく、ここで。 OracleはMSSQLよりも少し面倒ですが、これは私にとってはうまくいきました。
選択 GENERAL.GOREMAL。* 、rownum 、現在の日付 GENERAL.GOREMALから
以下が許容されます:
SELECT T1.*, T2.*, x + y as some_Z
またはおそらく
SELECT compute_foo() as aColumn, *
最後の行は、ワイルドカードが何列入力しても、常に最初の特別な列を同じ場所に保持します。
SQL Serverで書いた内容は完全に有効であり、Oracleでも同様に機能するはずです。日付列を元の形式で2回、書式付き形式で1回返すことに注意してください。
FYI SELECT *の使用はおそらく避けるべきですが、それは別の質問です:-)
FYI、結合がある場合、特に*はすべての結合フィールドに同じ情報があるため、サーバーとネットワークのリソースを浪費するため、避ける必要があります。 " select *"などのジャンクコーディングシステム内のすべてのクエリの記述が不十分な場合、修正が非常に困難になるパフォーマンスの問題が発生します。 SQL Serverでは、オブジェクトブラウザから列をドラッグできることを知っていますが、ORacleに似たようなものがあったとしても驚かないでしょう。
さらに、select *は、データテーブルの変更に伴って、非常に多くのバグを作成する可能性があります。希望する特定の順序で列に名前を付けないでください。