ヘッダーをスキップ
Oracle Rdb SQLリファレンス・マニュアル
リリース7.2
E06178-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

2.5 SQLフォーマット句およびDATATRIEVEフォーマット句

オプションのSQLフォーマット句およびDATATRIEVEフォーマット句を使用すると、対話型SQLユーザー、DATATRIEVEユーザー、または両方のユーザーに対するデータ表示または問合せの特性を変更できます。オプションのフォーマット句(QUERY NAMEおよびEDIT STRING)とDATATRIEVE句(QUERY HEADERおよびDEFAULT VALUE)は、次の文とともに使用できます。

次の図は、これらの句の形式を示しています。


詳細は、DATATRIEVEのドキュメントを参照してください。

次の項では、SQLフォーマット句のQUERY HEADERおよびEDIT STRINGについて説明します。

2.5.1 QUERY HEADER句

QUERY HEADER句では、該当する列を含む結果表を表示するときにSQLで使用される列ヘッダーを指定します。

QUERY HEADER句を含めると、問合せヘッダーが列ヘッダーとして使用されます。省略すると、列名が列ヘッダーとして使用されます。

列ヘッダーには、改行または制御文字を除く、すべての文字を含めることができます。列ヘッダーに二重引用符を含めるには、二重引用符を一重引用符で囲みます。

次の例では、1つの列の問合せヘッダーおよび別の列のDATATRIEVE問合せ名を定義しています。


SQL> ALTER TABLE TEMP
cont>      ADD STATE CHAR (2)
cont>         QUERY NAME FOR DATATRIEVE IS 'ST'
cont>      ADD SEX CHAR (1)
cont>         QUERY HEADER IS 'S'/'E'/'X';

これらの文では、STATE列およびSEX列の問合せヘッダーおよび問合せ名を定義しています。スラッシュ文字(/)はヘッダーが3行に分割されていることを示しているため、SEX列のヘッダーは、列自体と同じように1文字幅となります。

この例で使用している問合せヘッダーは、SQLとDATATRIEVEの両方に表示されます。問合せ名はDATATRIEVEでのみ認識されます。

2.5.2 EDIT STRING句

EDIT STRING句では、列値の出力形式を指定します。列値をファイルまたは出力デバイスに書き込む場合、EDIT STRING句がデフォルト形式として使用されます。

列値の形式を指定するには、1つ以上の編集文字の文字列を使用します。埋込みの空白を含まずに、一重引用符で編集文字列を指定します。通常、それぞれの編集文字は、表示される出力の1文字位置に相当します。たとえば、999999は、出力が6文字位置の6桁であることを示しています。

多くの同じ編集文字を入力するには、編集文字の後ろに繰返し回数をカッコで囲んで示し、編集文字列を短くします。たとえば、編集文字列9(6)は、999999に相当します。

通貨記号($)、小数点(.)および桁セパレータ(,)の各編集文字列の表示についてSQLとDATATRIEVEで使用される文字を変更できます。

その他の数値および通貨の表記法に出力を準拠させるには、次の論理名を再定義して、システムのデフォルトの記号をオーバーライドします。

SET文を使用してこれらの論理名をオーバーライドすることもできます。詳細は、「SET文」を参照してください。

表2-16から表2-23は、編集文字列を示しています。編集文字を指定する場合は、フィールドのタイプ(アルファベット文字、英数字、数値または日付)を考慮する必要があります。アルファベット文字または英数字のみと指定されている編集文字列を数値フィールドで使用するか、またはその逆を行うと、予期しない結果が生じます。

表2-15は、SQLで認められているCDO編集文字列を示しています。

表2-15 SQLでサポートされているCDO編集文字列
キャラクタ・
タイプ
CDO文字
または文字列
アルファベット文字 A
英数字 T
  X
コロン :
カンマ ,
日付、曜日、時間 D
  H
  J
  M
  N
  P
  R
  Q
  W
  Y
  %
  *
小数点 .
9
エンコード記号 C
指数 E
浮動 S
  Z"文字列"
  -
  +
  $
リテラル '文字列'
空白 B
マイナス・カッコ (( ))
欠落セパレータ ?
繰返し回数 x(n)

表2-16は、アルファベット文字と英数字の置換編集文字列を示しています。

表2-16 アルファベット文字と英数字の置換編集文字列
キャラクタ・タイプ 編集文字列 説明
アルファベット文字の置換 A それぞれのAを、列のコンテンツのアルファベット文字に置換する。列のコンテンツの各桁またはアルファベット文字以外の文字の位置にアスタリスク(*)を配置する。
SQL> ALTER TABLE EMPLOYEES ALTER ADDRESS_DATA_1

cont> EDIT STRING 'A(25)';
SQL> SELECT ADDRESS_DATA_1 FROM EMPLOYEES LIMIT TO 2 ROWS;
ADDRESS_DATA_1
*** Parnell Place
*** Tenby Dr*
2 rows selected
英数字の置換 X それぞれのXを、列のコンテンツの1文字に置換する。
SQL> ALTER TABLE EMPLOYEES ALTER MIDDLE_INITIAL

cont> EDIT STRING 'x.';
SQL> SELECT MIDDLE_INITIAL FROM EMPLOYEES LIMIT TO 3 ROWS;
MIDDLE_INITIAL
A.
D.
NULL
3 rows selected
  T 列テキストに指定された表示列の数を予約する。T編集文字列は、文字列を折り返し表示する長さを制御する場合に便利である。Tを含む編集文字列にその他の文字を含めることはできない。
SQL> ALTER TABLE EMPLOYEES ALTER ADDRESS_DATA_1

cont> EDIT_STRING 'T(5)';
SQL> SELECT ADDRESS_DATA_1 FROM EMPLOYEES;
ADDRESS_DATA_1
146
Parne
ll
Place

表2-17は、数値の置換編集文字列を示しています。

表2-17 数値の置換編集文字列
編集文字列 説明
9 それぞれの9を、列のコンテンツの1桁に置換する。桁以外の文字は無視される。桁は右詰めで表示され、先行文字位置には(ある場合)、ゼロが移入される。
SQL> ALTER TABLE SALARY_HISTORY ALTER SALARY_AMOUNT

cont> EDIT STRING '999999999';
SQL> SELECT SALARY_AMOUNT FROM SALARY_HISTORY LIMIT TO 2 ROWS;
SALARY_AMOUNT
000026291
000051712
2 rows selected
Z それぞれのZを、列のコンテンツの1桁に置換する。ただし、列のコンテンツの先行ゼロは空白に置換される。
SQL> ALTER TABLE SALARY_HISTORY ALTER SALARY_AMOUNT

cont> EDIT STRING 'ZZZZZZZZZ';
SQL> SELECT SALARY_AMOUNT FROM SALARY_HISTORY LIMIT TO 2 ROWS;
SALARY_AMOUNT
26291
51712
2 rows selected
* それぞれのアスタリスク(*)を、列のコンテンツの1桁に置換する。ただし、先行ゼロはアスタリスクに置換される。
SQL> ALTER TABLE SALARY_HISTORY ALTER SALARY_AMOUNT

cont> EDIT STRING '*********';
SQL> SELECT SALARY_AMOUNT FROM SALARY_HISTORY LIMIT TO 2 ROWS;
SALARY_AMOUNT
****26291
****51712
2 rows selected
. ピリオド(.)によって、小数点の文字位置を指定する。
SQL> ALTER TABLE SALARY_HISTORY ALTER SALARY_AMOUNT

cont> EDIT STRING 'ZZZZZZ.ZZ';
SQL> SELECT SALARY_AMOUNT FROM SALARY_HISTORY LIMIT TO 2 ROWS;
26291.00
51712.00
2 rows selected

表2-18は、英数字挿入の編集文字列を示しています。

表2-18 英数字挿入の編集文字列
編集文字列 説明
+ 英数字列にプラス記号(+)が1つのみ指定されている場合、その文字位置にプラス記号(+)を挿入する。
SQL> ALTER TABLE EMPLOYEES ALTER EMPLOYEE_ID

cont> EDIT STRING 'XX+XXX';
SQL> SELECT EMPLOYEE_ID FROM EMPLOYEES LIMIT TO 2 ROWS;
EMPLOYEE_ID
00+164
00+165
2 rows selected
- その文字位置にハイフン(-)を挿入する。
SQL> ALTER TABLE EMPLOYEES ALTER EMPLOYEE_ID

cont> EDIT STRING 'XX-XXX';
SQL> SELECT EMPLOYEE_ID FROM EMPLOYEES LIMIT TO 2 ROWS;
EMPLOYEE_ID
00-164
00-165
2 rows selected
. その文字位置にピリオド(.)を挿入する。
SQL> ALTER TABLE EMPLOYEES ALTER MIDDLE_INITIAL

cont> EDIT STRING 'X.?''No middle initial';
SQL> SELECT MIDDLE_INITIAL FROM EMPLOYEES LIMIT TO 10 ROWS;
MIDDLE_INITIAL
D.
G.
P.
O.
M.
No middle initial
I.
No middle initial
A.
E.
10 rows selected
, その文字位置にカンマ(,)を挿入する。
SQL> ALTER TABLE EMPLOYEES ALTER EMPLOYEE_ID

cont> EDIT STRING 'XX,XXX';
SQL> SELECT EMPLOYEE_ID FROM EMPLOYEES LIMIT TO 2 ROWS;
EMPLOYEE_ID
00,164
00,165
2 rows selected

表2-19は、数値挿入の編集文字列を示しています。

表2-19 数値挿入の編集文字列
編集文字列 説明
+ プラス記号(+)が1つのみ指定されている場合、列のコンテンツが正のときはプラス記号(+)を、列のコンテンツが負のときはマイナス記号(--)を左端の文字位置に配置する。
SQL> -- COL1 is INTEGER and contains the values 53333 and
-53333:

SQL> ALTER TABLE TEMP ALTER COL1
cont> EDIT STRING '+9(9).99';
SQL> SELECT COL1 FROM TEMP;
COL1
+000053333.00
-000053333.00
-- マイナス記号(--)が1つのみ指定されている場合、列のコンテンツが正のときは空白を、列のコンテンツが負のときはマイナス記号(--)を左端の文字位置に配置する。
SQL> -- COL1 is INTEGER and contains the values 53333 and
-53333:

SQL> ALTER TABLE TEMP ALTER COL1
cont> EDIT STRING '-9(9).99';
SQL> SELECT COL1 FROM TEMP;
COL1
000053333.00
-000053333.00
. 論理名SYS$RADIX_POINTによって指定された文字(デフォルトは小数点(.))をその文字位置に挿入する。数値の編集文字列に小数点(.)を1つのみ配置する。(SYS$RADIX_POINTはOpenVMSでのみサポートされています。)
SQL> ALTER TABLE SALARY_HISTORY ALTER SALARY_AMOUNT

cont> EDIT STRING 'ZZZZZZ.ZZZZ';
SQL> SELECT SALARY_AMOUNT FROM SALARY_HISTORY LIMIT TO 2 ROWS;
SALARY_AMOUNT
26291.0000
51712.0000
2 rows selected
, カンマの左側すべての桁が抑制されたゼロの場合、カンマ(,)を空白に置換する。それ以外の場合は、論理名SYS$DIGIT_SEPによって指定された文字(デフォルトはカンマ)をその文字位置に挿入する。(SYS$DIGIT_SEPはOpenVMSでのみサポートされています。)
SQL> ALTER TABLE SALARY_HISTORY ALTER SALARY_AMOUNT

cont> EDIT STRING 'ZZZ,ZZZ.ZZZZ';
SQL> SELECT SALARY_AMOUNT FROM SALARY_HISTORY LIMIT TO 2 ROWS;
SALARY_AMOUNT
26,291.0000
51,712.0000
2 rows selected
CR 列のコンテンツが負の場合は、文字CRを挿入する。列のコンテンツが正の場合は、空白を2つ挿入する。CRは、編集文字列の右端または左端のいずれかに1つのみ配置する。
SQL> -- COL1 is INTEGER and contains the values 53333 and
-53333:

SQL> ALTER TABLE TEMP ALTER COL1
cont> EDIT STRING 'ZZZZZ.ZZCR';
SQL> SELECT COL1 FROM TEMP;
COL1
53333.00
53333.00CR
DB 列のコンテンツが負の場合は、文字DBを挿入する。列のコンテンツが正の場合は、空白を2つ挿入する。DBは、編集文字列の右端または左端のいずれかに1つのみ配置する。
SQL> -- COL1 is INTEGER and contains the values 53333 and
-53333:

SQL> ALTER TABLE TEMP ALTER COL1
cont> EDIT STRING 'ZZZZZ.ZZDB';
SQL> SELECT COL1 FROM TEMP;
COL1
53333.00
53333.00DB
(( )) 列のコンテンツが負の場合は、編集文字列を二重カッコで囲み、列値の前後にカッコを挿入する。
SQL> -- COL1 is INTEGER and contains the values 53333 and
-53333:

SQL> ALTER TABLE TEMP ALTER COL1
cont> EDIT STRING '((9(6).99))';
SQL> -- Equivalent notation: '((999999.99))'
SQL> SELECT COL1 FROM TEMP;
COL1
053333.00
(053333.00)

表2-20は、英数字と数値挿入の編集文字列を示しています。

表2-20 英数字と数値挿入の編集文字列
編集文字列 説明
B その文字位置に空白を挿入する。
SQL> ALTER TABLE EMPLOYEES ALTER EMPLOYEE_ID

cont> EDIT STRING 'XXXXBX';
SQL> SELECT EMPLOYEE_ID FROM EMPLOYEES LIMIT TO 2 ROWS;
EMPLOYEE_ID
0016 4
0016 5
2 rows selected
0 その文字位置にゼロを挿入する。
SQL> ALTER TABLE SALARY_HISTORY ALTER SALARY_AMOUNT

cont> EDIT STRING '99999.000';
SQL> SELECT SALARY_AMOUNT FROM SALARY_HISTORY LIMIT TO 2 ROWS;
SALARY_AMOUNT
26291.000
51712.000
2 rows selected
$ ドル記号($)が1つのみ指定されている場合は、論理名SYS$CURRENCYによって指定された文字(デフォルトはドル記号)をその文字位置に挿入する。(SYS$CURRENCYはOpenVMSでのみサポートされている。)
SQL> ALTER TABLE SALARY_HISTORY ALTER SALARY_AMOUNT

cont> EDIT STRING '$9(9)';
SQL> SELECT SALARY_AMOUNT FROM SALARY_HISTORY;
SALARY_AMOUNT
$000026291
.
.
.
$000007089
.
.
.
% その文字位置にパーセント記号(%)を挿入する。
SQL> CREATE VIEW TEST (SALARY EDIT STRING '$99999.99',

cont> POINTLESS_PERCENT EDIT STRING '%99.999')
cont> AS SELECT SALARY_AMOUNT,
cont> SALARY_AMOUNT/SUM(SALARY_AMOUNT)
cont> FROM SALARY_HISTORY WHERE SALARY_END IS NULL
cont> GROUP BY SALARY_AMOUNT;
SQL> SELECT * FROM TEST LIMIT TO 2 ROWS;
SALARY POINTLESS_PERCENT
$08687.00 %01.000
$08951.00 %01.000
2 rows selected
/ その文字位置にスラッシュ(/)を挿入する。
SQL> ALTER TABLE EMPLOYEES ALTER LAST_NAME

cont> EDIT STRING 'XXX/';
SQL> SELECT LAST_NAME FROM EMPLOYEES LIMIT TO 2 ROWS;
LAST_NAME
Ame/
And/
2 rows selected
リテラル その文字位置に引用符で囲まれた文字列リテラルを挿入する。引用符は出力には挿入されない。
SQL> ALTER TABLE EMPLOYEES ALTER LAST_NAME

cont> EDIT STRING 'XXX/''Truncated last name';
SQL> SELECT LAST_NAME FROM EMPLOYEES LIMIT TO 2 ROWS;
LAST_NAME
Ame/Truncated last name
And/Truncated last name
2 rows selected

表2-21は、数値浮動挿入の編集文字列を示しています。

表2-21 数値浮動挿入の編集文字列
編集文字列 説明
$ 複数のドル記号($)がその他の編集文字列の左側に指定されている場合は、先行ゼロを抑制し、SYS$CURRENCY論理名によって指定された文字(デフォルトはドル記号)を左端の桁の左側に挿入する。(SYS$CURRENCYはOpenVMSでのみサポートされている。)
SQL> -- Compare this with single $ edit string character:

SQL> ALTER TABLE SALARY_HISTORY ALTER SALARY_AMOUNT
cont> EDIT STRING '$(9).99';
SQL> SELECT SALARY_AMOUNT FROM SALARY_HISTORY;
SALARY_AMOUNT
$26291.00
.
.
.
$7089.00
.
.
.
+ 複数のプラス記号(+)がその他の編集文字列の左側に指定されている場合は、先行ゼロを抑制し、列の値の記号(プラスまたはマイナス)を左端の桁の左側に表示する。
SQL> -- COL1 is INTEGER and contains the values 53333 and
-53333:

SQL> -- Compare this with single + edit string character:
SQL> ALTER TABLE TEMP ALTER COL1
cont> EDIT STRING '+(9)';
SQL> SELECT COL1 FROM TEMP;
COL1
+53333
-53333
-- 複数のマイナス記号(--)がその他の編集文字列の左側に指定されている場合は、マイナス記号と同じ位置にある先行ゼロを抑制する。列の値が負の場合は、左端の桁の左側にマイナス記号を表示する。
SQL> -- COL1 is INTEGER and contains the values 53333 and
-53333:

SQL> -- Compare this with single - edit string character:
SQL> ALTER TABLE TEMP ALTER COL1
cont> EDIT STRING '-(9)';
SQL> SELECT COL1 FROM TEMP;
COL1
53333
-53333

表2-22は、浮動小数点、NULL値および欠落値の各編集文字列を示しています。

表2-22 浮動小数点、NULL値および欠落値の各編集文字列
キャラクタ・タイプ 編集文字列 説明
浮動小数点
編集文字列
E Eは、編集文字列を浮動小数点または科学表記法の2つの部分に分割する。最初の部分は仮数の表示、2つ目の部分は指数の表示を制御する。
SQL> -- COL1 is INTEGER and contains the values 53333 and
-53333:

SQL> ALTER TABLE TEMP ALTER COL1
cont> EDIT STRING '+9.9(4)E+9';
SQL> SELECT COL1 FROM TEMP;
COL1
+5.3333E+4
-5.3333E+4
NULL値
欠落値
? 疑問符(?)は、列値がNULLであるか(SQL)、またはMISSING VALUE句で(DATATRIEVEに)指定された値と一致する場合に表示される引用符付き文字列の始まりを示す。列値がNULLでない場合は、疑問符の前の編集文字列によって値の表示が制御される。
SQL> ALTER TABLE EMPLOYEES ALTER MIDDLE_INITIAL

cont> EDIT STRING 'X.?''No middle initial';
SQL> SELECT MIDDLE_INITIAL FROM EMPLOYEES LIMIT TO 10 ROWS;
MIDDLE_INITIAL
D.
G.
P.
O.
M.
No middle initial
I.
No middle initial
A.
E.
10 rows selected

表2-23は、DATE VMSデータ型の日付置換編集文字列を示しています。

表2-23 日付置換の編集文字列
編集文字列 説明
D それぞれのDを、日付に対応する桁に置換する。日付編集文字列には2つまでのDが配置されるが、DDの使用を推奨する。
SQL> ALTER TABLE EMPLOYEES ALTER BIRTHDAY

cont> EDIT STRING 'DD-MMM-YYYY';
SQL> SELECT BIRTHDAY FROM EMPLOYEES LIMIT TO 2 ROWS;
BIRTHDAY
15-May-1954
12-Jan-1923
2 rows selected
H それぞれのHを、12時間表記での時間に対応する桁に置換する。
R それぞれのRを、24時間表記での時間に対応する桁に置換する。
P それぞれのPを、分に置換する。
Q それぞれのQを、秒に置換する。
M それぞれのMを、月の名前に対応する文字に置換する。M(9)の編集文字列は、月の名前全体を表示する。
SQL> ALTER TABLE EMPLOYEES ALTER BIRTHDAY

cont> EDIT STRING 'M(9)BDD,BYYYY';
SQL> SELECT BIRTHDAY FROM EMPLOYEES LIMIT TO 2 ROWS;
BIRTHDAY
March 28, 1947
May 15, 1954
2 rows selected
N それぞれのNを、月の数字の桁に置換する。日付編集文字列には2つ以下のNが配置されるが、NNの使用を推奨する。
SQL> ALTER TABLE EMPLOYEES ALTER BIRTHDAY

cont> EDIT STRING 'NN/DD/YYYY';
SQL> SELECT BIRTHDAY FROM EMPLOYEES LIMIT TO 2 ROWS;
BIRTHDAY
5/15/1954
1/12/1923
2 rows selected
Y YYは世紀の年を、YYYYは年および世紀を表す。このリリースでは、9999年を超えるの日付のYYYYYがサポートされており、たとえば、YYYYNNDDは19990114と表される。
J それぞれのJを、ユリウス暦の日付に対応する桁に置換する。日付編集文字列には3つ以下のJが配置されるが、JJJの使用を推奨する。
SQL> ALTER TABLE EMPLOYEES ALTER BIRTHDAY

cont> EDIT STRING
cont> 'M(9)BDD'' is the ''JJJ''th day of ''YYYY';
SQL> SELECT BIRTHDAY FROM EMPLOYEES LIMIT TO 2 ROWS;
BIRTHDAY
March 28 is the 087th day of 1947
May 15 is the 135th day of 1954
2 rows selected
W それぞれのWを、曜日に対応する文字に置換する。W(9)の編集文字列は、曜日全体を表示する。日付編集文字列には9つ以下のWを配置する。
SQL> ALTER TABLE EMPLOYEES ALTER BIRTHDAY

cont> EDIT STRING 'W(9),BM(9)BDD,BYYYY';
SQL> SELECT BIRTHDAY FROM EMPLOYEES LIMIT TO 2 ROWS;
BIRTHDAY
Friday, March 28, 1947
Saturday, May 15, 1954
2 rows selected
B それぞれのBを、その文字位置で空白に置換する。
/ その文字位置にスラッシュ(/)を挿入する。
- その文字位置にハイフン(-)を挿入する。
: その文字位置にコロン(:)を挿入する。
. その文字位置にピリオド(.)を挿入する。
% その文字位置にパーセント正午標識(%)を挿入する。この文字列は、デフォルトで午前はAM、午後はPMとなる。
*(アスタリスク) それぞれの*を、小数秒に置換する。たとえば、RR:PP:QQ.**は22:34:45.56と表される。