連載
» 2008年06月13日 00時00分 公開

単一行関数を使用した出力のカスタマイズ間違いやすいポイントを追え! Bronze SQL基礎I(4)(1/2 ページ)

Oracleデータベースエンジニアとしての基礎力を証明するORACLE MASTER Bronzeの取得を目指すITエンジニアは多い。本連載で間違いやすいポイントを確認し、合格に近づこう!

[ゴールデンフォレスト株式会社,@IT]

 前回「SQLでのデータの制限とソート」では、WHERE句で使用できる比較演算子、ORDER BY句の利用方法を学習しました。

 今回は、以下の項目について確認します。

  • 単一行関数
  • 変換関数

単一行関数の種類と使用方法

例題1

次のデータと要件を確認してください。

SQL> desc test1
名前                            NULL?    型
------------------------------- -------- -------------------------
COL1                                     NUMBER
COL2                                     VARCHAR2(10)
COL3                                     CHAR(10)
SQL> select * from test1;
      COL1 COL2                 COL3
---------- -------------------- --------------------
         1 井上                 Inoue
         2 長谷川               Hasegawa

次の文を実行したとき、戻される値として正しいものを選択してください。

select length(col3)
from test1
where col3='Hasegawa';

次の文を実行したとき、戻される値として正しいものを選択してください。

SQL> select length(col3)
  2  from test1
  3  where col3='Hasegawa';
LENGTH(COL3)
------------
          10

a.10

b.6

c.3

d.4

例題の範囲をおさらい

参考:「SQLで使える関数の基礎知識

 LENGTHは、単一行関数の一種である文字関数の1つで、引数で指定した文字データの文字数を戻します。

(例)
LENGTH('ABCD')→4

正解

a

解説

 問題のSQL文を実行すると、以下のような結果が戻ります。

select length(col3)
from test1
where col3='Hasegawa';

 この問題でポイントとなるのは、値が格納されている列のデータ型です。

 問題文に提示されているデータから分かるように、COL2はVARCHAR2型、COL3はCHAR型です。VARCHAR2型は可変長文字データであり、CHAR型は固定長文字データです。

 以下の結果を確認してください。

SQL> select col2,length(col2),col3,length(col3)
  2  from test1;
COL2                 LENGTH(COL2) COL3                 LENGTH(COL3)
-------------------- ------------ -------------------- ------------
井上                            2 Inoue                          10
長谷川                          3 Hasegawa                       10

 このように、VARCHAR2型の場合は、全角半角に関係なく、入っている値の文字数を戻します。しかし、CHAR型は固定長であるため、設定された文字数を戻します。

 よって、正解はaの「10」です。

例題2

select add_months('2008-05-31',1) from dual;

上記のSQL文を実行した結果として正しいものを1つ選択してください。

a.2008-07-01

b.2008-06-31

c.2008-06-30

d.エラーになる

例題の範囲をおさらい

参考:「SQLで使える関数の基礎知識

 ADD_MONTHSは、単一行関数の一種である日付関数の1つで、日付に月数を加算します。

 ADD_MONTHS('date', m)のように2つの引数を取り、dateにm月を加算します。mの値が負の場合は、m月を減算します。

正解

c

解説

 問題のSQL文を実行すると、以下のような結果が戻ります。

SQL> select add_months('2008-05-31',1) from dual;
ADD_MONTHS
----------
2008-06-30

 この問題のポイントは、引数として指定された5月31日が、月の最後の日であることです。

 通常は、引数に指定された値に、そのまま加算または減算します。

SQL> select add_months('2008-05-15',1) from dual;
ADD_MONTHS
----------
2008-06-15

 しかし、指定された日が月の最後の日の場合は、加算した結果である月の最後の日を戻します。

SQL> select add_months('2008-05-31',6) from dual;
ADD_MONTHS
----------
2008-11-30

 よって、正解はcの「2008-06-30」です。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。