質問

Oracle SQL (SQLDeveloper で使用しているため、COLUMN などの SQLPLUS コマンドにアクセスできません) を使用して、次のようなクエリを実行しています。

select assigner_staff_id as staff_id, active_flag, assign_date,
  complete_date, mod_date
from work where assigner_staff_id = '2096';

結果は次のようになります。

STAFF_ID               ACTIVE_FLAG ASSIGN_DATE               COMPLETE_DATE             MOD_DATE                  
---------------------- ----------- ------------------------- ------------------------- ------------------------- 
2096                   F           25-SEP-08                 27-SEP-08                 27-SEP-08 02.27.30.642959000 PM 
2096                   F           25-SEP-08                 25-SEP-08                 25-SEP-08 01.41.02.517321000 AM 

2 rows selected

これにより、結果を電子メールや問題レポートなどに適切にフォーマットされた簡単なテキスト ブロックとして貼り付けようとすると、非常に広範囲で扱いにくいテキスト レポートが簡単に作成されてしまう可能性があります。プレーンバニラの Oracle SQL だけを使用している場合に、出力列の余分な空白をすべて削除する最善の方法は何ですか?これまでのところ、Web 検索結果はすべて、SQLPLUS の COLUMN などの書式設定コマンド (私は持っていません) を使用して行う方法を示しているため、あまりヒットしませんでした。

役に立ちましたか?

解決

結果を得るために何を使用していますか?貼り付けた出力は SQL*PLUS からのもののように見えます。結果の生成に使用しているツールには、出力を変更する何らかの方法がある可能性があります。

デフォルトでは、Oracle はタイトルの幅または列データの幅の広い方に基づいて列を出力します。

列を小さくしたい場合は、列の名前を変更するか、テキストに変換して substr() を使用してデフォルトを小さくする必要があります。

select substr(assigner_staff_id, 8) as staff_id, 
      active_flag as Flag, 
      to_char(assign_date, 'DD/MM/YY'),
      to_char(complete_date, 'DD/MM/YY'), 
      mod_date
from work where assigner_staff_id = '2096';

他のヒント

ステートメントでは、探している出力のタイプを指定できます。

select /*csv*/ col1, col2 from table;
select /*Delimited*/ col1, col2 from table;

xml、html、テキスト、ローダーなどの他の形式も利用できます。

これらの特定のオプションの書式設定は、[ツール] > [環境設定] > [データベース] > [ユーティリティ] > [エクスポート] で変更できます。

必ず「ステートメントの実行」ではなく「スクリプトの実行」を選択してください。

* これは Oracle SQL Developer v3.2 用です

SQL でできることはツールによって制限されます。SQL Plus には列をフォーマットするコマンドがありますが、実際には使いやすいものではありません。

簡単な方法の 1 つは、出力を Excel に貼り付けてそこで書式設定するか、スプレッドシートを添付することです。一部のツールでは、出力をスプレッドシートとして直接保存します。

いい質問ですね。本当に考えなければなりませんでした。

できることの 1 つは、使用可能な最も狭い列のみを返すように SQL を変更することです。

例えば(私は oracle 構文についてはあまり詳しくありませんが、同様のものが機能するはずです):

select substring( convert(varchar(4), assigner_staff_id), 1, 4 ) as id, 
       active_flag as act, -- use shorter column name

       -- etc. 

from work where assigner_staff_id = '2096';

それは理にかなっていますか?
これを unix/linux で実行している場合は、コマンドラインから実行し、awk スクリプトを介してパイプ処理することをお勧めします。

私が理解を誤っていた場合は、質問を更新してください。もう一度質問します:)

返される行がそれほど多くない場合は、よく使用します トム・カイツ print_table 関数。

SQL> set serveroutput on 
SQL> execute print_table('select * from all_objects where rownum < 3');
OWNER                         : SYS
OBJECT_NAME                   : /1005bd30_LnkdConstant
SUBOBJECT_NAME                :
OBJECT_ID                     : 27574
DATA_OBJECT_ID                :
OBJECT_TYPE                   : JAVA CLASS
CREATED                       : 22-may-2008 11:41:13
LAST_DDL_TIME                 : 22-may-2008 11:41:13
TIMESTAMP                     : 2008-05-22:11:41:13
STATUS                        : VALID
TEMPORARY                     : N
GENERATED                     : N
SECONDARY                     : N
-----------------
OWNER                         : SYS
OBJECT_NAME                   : /10076b23_OraCustomDatumClosur
SUBOBJECT_NAME                :
OBJECT_ID                     : 22390
DATA_OBJECT_ID                :
OBJECT_TYPE                   : JAVA CLASS
CREATED                       : 22-may-2008 11:38:34
LAST_DDL_TIME                 : 22-may-2008 11:38:34
TIMESTAMP                     : 2008-05-22:11:38:34
STATUS                        : VALID
TEMPORARY                     : N
GENERATED                     : N
SECONDARY                     : N
-----------------

PL/SQL procedure successfully completed.

SQL> 

行が多い場合は、SQL Developerでクエリを実行し、xlsとして保存します。ビジネスタイプは、何らかの理由でExcelを好みます。

「キャスト」機能を使ってみてはいかがでしょうか?

select 
(cast(assigner_staff_id as VARCHAR2(4)) AS STAFF_ID,
(cast(active_flag as VARCHAR2(1))) AS A,
(cast(assign_date as VARCHAR2(10))) AS ASSIGN_DATE,
(cast(COMPLETE_date as VARCHAR2(10))) AS COMPLETE_DATE,
(cast(mod_date as VARCHAR2(10))) AS MOD_DATE
from work where assigner_staff_id = '2096';
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top