SQLを学んだ3回目

Database

こんにちは、今日は3回目のSQLを学んでみた記事になります。これまではSELECT文やWHERE句、そしてソートを学んできました。今回はSQLの関数を見て行こうと思います。

使用するのはこれまで同様Oracle Database 18cです。

単一行関数

関数(Function)を使ってすでに決められたアルゴリズムを呼び出し、SQLの結果を関数を含めて反映します。SQLの関数には単一関数とグループ関数がありますが、今日は単一関数を扱っていきます。

UPPER, LOWER, INICAP関数

まずは簡単なものから使っていきます。UPPER,LOWER,INICAPこれらはデータベースの文字列を大文字、小文字、先頭のみ大文字に変換します。

SELECT name, UPPER(name), LOWER(name), INITCAP(name) FROM employees;


NAME       UPPER(NAME LOWER(NAME INITCAP(NA
---------- ---------- ---------- ----------
King       KING       king       King      
John       JOHN       john       John      
David      DAVID      david      David     
Paul       PAUL       paul       Paul      
Jones      JONES      jones      Jones     
Steven     STEVEN     steven     Steven    
Denver     DENVER     denver     Denver  

試しに、name列を全て大文字、小文字、先頭のみ大文字にして取り出してみました。INITCAPは元々のデータが先頭を大文字にしてあるので変化はありません。

CONCAT, SUBSTR関数

次に文字列を結合するCONCAT、文字列を切り取るSUBSTR関数を使ってみます。

SELECT CONCAT('I am ', name) FROM employees;

CONCAT('IAM',NA
---------------
I am King
I am John
I am David
I am Paul
I am Jones
I am Steven
I am Denver


SELECT name, SUBSTR(name, 2,2) FROM employees;

NAME       SU
---------- --
King       in
John       oh
David      av
Paul       au
Jones      on
Steven     te
Denver     en

CONCAT関数の引数には”I am “と入力したので、出力結果はI am (name)となりました。SUBSTRではnameの2文字目から2文字抜き出したため、Kingがinとなっています。他も同様です。

LENGTH関数

LENGTHはプログラミング言語でもよく目にしますね。文字数を返します。

SELECT name, LENGTH(name) FROM employees;


NAME       LENGTH(NAME)
---------- ------------
King                  4
John                  4
David                 5
Paul                  4
Jones                 5
Steven                6
Denver                6

数であるsalaryでも試してみましょう。

SELECT salary, LENGTH(salary) FROM employees;

    SALARY LENGTH(SALARY)
---------- --------------
      4500              4
      1800              4
      2400              4
      1800              4
      2500              4
      2500              4
      2600              4

文字列でも数に対しても数を取得できました。

TRIM, REPLACE関数

TRIM関数は、指定した文字を削除してから表示を行うことができます。デフォルトでは先頭と末尾の文字が削除されるようです。

例えば”TEST”という文字列から”T”を削除し”ES”という文字列を出力できます。試してみましょう。

SELECT TRIM('T' FROM 'TEST') FROM dual;


TR
--
ES

次にREPLACE関数ですが、名前の通り文字を置換します。

SELECT REPLACE('Hello World!', 'o', 'O') FROM dual;

REPLACE('HEL
------------
HellO WOrld!

文字列”Hello World!”の小文字の”o”を大文字の”O”に置換しました。

*利用しているTABLEの”dual”とは誰でもアクセスできるテーブルだそうです。DUMMYが一列挿入されており、返り値の試しなどで使われるそうです。今回もSELECTでテーブルからの取得ではなく出力を確認するためにdualテーブルを利用しました。

ROUND, TRUNC, MOD関数

次に数値関数を使ってみます。roundはプログラミングの際にも目にしますね、数値を四捨五入してくれます。第2引数に小数点以下n桁に四捨五入する数を指定します。

SELECT ROUND(1223.45678, 1) FROM dual;

ROUND(1223.45678,1)
-------------------
             1223.5

SELECT ROUND(1223.45678, 0) FROM dual;

ROUND(1223.45678,0)
-------------------
               1223

SELECT ROUND(1223.45678, -1) FROM dual;

ROUND(1223.45678,-1)
--------------------
                1220

第2引数にマイナスの数値を指定すると小数点以下-1桁、つまり整数部分の桁の四捨五入を行います。-1を指定した場合1の位が四捨五入されます。

TRUNC関数は四捨五入ではなく数字の切り捨てを行います。ROUNDと比較して出力してみます。

SELECT ROUND(1223.45, 1) ,TRUNC(1223.45, 1) FROM dual;

ROUND(1223.45,1) TRUNC(1223.45,1)
---------------- ----------------
          1223.5           1223.4

少数第2位の5がROUNDでは四捨五入され、TRUNCでは切り捨てられていることがわかります。

最後にMOD関数ですが、名前の通り割り算の余りを戻します。20を4で割った余りを求めてみましょう。

SELECT MOD(23, 4) FROM dual;

 MOD(23,4)
----------
         3

おわりに

今日は3回目になるSQLを学ぶ記事でした。SQLの関数を使ってみました。他にもたくさん関数があるのでまた扱っていきたいと思います。

今日も最後までご覧いただきありがとうございました。

コメント

タイトルとURLをコピーしました