こんにちは、今日は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の関数を使ってみました。他にもたくさん関数があるのでまた扱っていきたいと思います。
今日も最後までご覧いただきありがとうございました。
コメント