5

次のようなクエリを実行するために、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 行が選択されました

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

4

6 に答える 6

2

結果を得るために何を使用していますか?貼り付けた出力は、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';
于 2008-09-27T18:22:56.327 に答える
1

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

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

于 2008-09-27T18:33:48.780 に答える
0

「キャスト」機能を使用しないのはなぜですか?

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';
于 2013-11-20T14:43:52.113 に答える
0

良い質問です。私は本当にそれについて考えなければなりませんでした。

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

例(私はオラクルの構文にあまり熱心ではありませんが、似たようなものがうまくいくはずです):

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 スクリプトを介してパイプすることをお勧めします。

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

于 2008-09-27T18:26:18.643 に答える
0

多くの行が返されない場合は、Tom Kytes の 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 が大好きです。

于 2008-09-28T02:42:04.037 に答える