Oracleデータベースエンジニアとしての基礎力を証明するORACLE MASTER Bronzeの取得を目指す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」です。
Copyright © ITmedia, Inc. All Rights Reserved.