【Oracle SQL】文字関数を書く練習問題を作ってみた
Oracle Master BronzeのSQLを受験する予定なのですが、文字列を操作する関数の使い方がまだおぼえられません。
なので、簡単な練習問題を作って勉強してみました。
ちなみに、選択肢を選ぶより1からSQLを書けるようにした方が実務でも役に立つと思い、SQLを書く形式にしました。
使用するテーブル
今回使用するテーブルは、↓のEMP表です。(全レコードではなく、抜粋した10件しか表示されていません)
※列名や表名は問題内に記載してるので、ざっと見ていただければOKです!
では、問題に入っていきます!
問題①
emp表から、empno列とename列を結合し、「q1」列として表示してください。
<想定結果>
Q1
-------------
7839KING
7698BLAKE
7782CLARK
(以下略)
問題①の答え
SELECT CONCAT(empno, ename) q1 FROM emp;
CONCAT関数は、以下のように記述します。
CONCAT(文字列①, 文字列②)
→「文字列①」と「文字列②」を結合
ちなみに、empnoの値は数値型ですが、CONCAT関数が処理するときに文字列型に暗黙的に型変換されるため、エラーは発生しません。
問題②
emp表から、enameの3文字目が'A'の人のenameを表示してください。
※文字関数を使って書いてみてください!
<想定結果>
EMP
-------------
BLAKE
CLARK
ADAMS
問題②の答え
SELECT ename FROM emp WHERE SUBSTR(ename, 3, 1) = 'A';
SUBSTR関数の書式は、以下の通りです。
SUBSTR(対象文字列, 開始位置, 長さ)
→「対象文字列」について、「開始位置」番目の文字から「長さ」分の文字を切り取る
つまり、SUBSTR(ename, 3, 1)は、ename列の3文字目から1文字を切り取る、ということを意味します。
(切り取った部分のみが戻されるということです)
ちなみに、文字関数を使わず、ワイルドカードを用いると、以下のようになります。
SELECT ename FROM emp WHERE ename LIKE '__A%' ;
問題③
emp表から、ename列とenameの文字数(q3列とする)を表示してください。
<想定結果>
ENAME | Q3
---------------
KING | 4
BLAKE | 5
CLARK | 5
(以下略)
問題③の答え
SELECT ename, LENGTH(ename) q3 FROM emp;
LENGTH関数の書式は、下記の通りです。
LENGTH(文字列)
→「文字列」の長さを求める
LENGTH関数は引数も1つしか取らないですし、分かりやすい関数でありがたいですね!
問題④
emp表から、ename列の10文字に満たない部分に'X'を埋めて、q4列として表示してください。
<想定結果>
Q4
----------------
KINGXXXXXX
BLAKEXXXXX
CLARKXXXXX
問題④の答え
SELECT RPAD(ename, 10, 'X') q4 FROM emp;
RPAD関数(とLPAD関数)は、以下のように書きます。
RPAD(文字列①, 長さ, 文字列②) →「文字列①」の文字数が「長さ」になるよう、右側に「文字列②」を埋める LPAD(文字列①, 長さ, 文字列②) →「文字列①」の文字数が「長さ」になるよう、左側に「文字列②」を埋める ※どちらも、「文字列①」の文字数が「長さ」以上である場合は、文字数が「長さ」になるように文字列を切り捨てる
RPAD(ename, 10, 'X')と書くと、ename列の値が10文字になるように「X」という文字を埋める、という意味になります。
今回は「X」1文字でしたが、「abc」のように文字列で埋めることも可能です。
応用問題
ename列を、最初3文字を'X'に置き換えてq5列として表示してください。
<想定結果>
Q5
---------
xxxG
xxxKE
xxxRK
応用問題の答え
SELECT LPAD( SUBSTR(ename,4), LENGTH(ename), 'x' ) q5 FROM emp;
文字関数を複数使っているので、応用問題ということにしてみました。
まずSUBSTR(ename,4)は、enameの4文字目以降を切り取るという意味です。
次にLENGTH(ename)では、enameの文字数を求めます。
なので、LPAD( SUBSTR(ename,4), LENGTH(ename), 'x' )は、「enameの4文字目以降」を切り取り、「enameの文字数」になるまで左側に「X」を埋める、という意味になります。
おわりに
資格試験って実務では役に立たないことも多いですが、文字列操作は実務でもたくさん使うと思います。
なので、選択肢を選ぶだけではなく自分でSQLを書けるようにして、「資格は取ったけど役に立たないな・・・」なんてことにならないようにしていきたいです!