関数とは
関数とはあるデータを受け取り、定められた独自の処理を実行し、その結果を返す命令のことです。データベースではより高度な処理を実行するためにたくさんの関数が存在してます。
例えばLNGTH関数はある文字列をその文字列の長さ(文字数)に変換する機能を持っています。
SQLの関数を使う際は以下の事が定められています。
・名前:その関数の名前
・引数:その関数を呼び出す際に引き渡す情報
・戻り値:その関数の呼び出し結果として得られる情報
先程のLENGTH関数を例に見てみると
・名前:LENGTH
・引数:文字が格納された列
・戻り値:文字列の長さを表す数値
関数は式の評価と同様に、各行ごとに呼び出されます。
それでは代表的な関数を紹介します。
文字列にまつわる関数
LENGTH
LENGTH(文字列を表す列) => 文字列の長さを表す数値
LEN(文字列を表す列) => 文字列の長さを表す数値
例えば10文字以上のタイトルだけを取得するSQLは下記のように書けます。
SELECT タイトル, LENGTH(タイトル) AS タイトルの長さ FROM 映画 WHERE LENGTH(タイトル) >= 10
TRIM
TRIM(文字列を表す列) => 左右から空白を除去した文字列
LTRIM(文字列を表す列) => 左から空白を除去した文字列
RTRIM(文字列を表す列) => 右から空白を除去した文字列
たとえばCHAR(10)型の列に対して”タイトル”と入力すると6文字の空白が自動で追加されます。
つまり'タイトル 'といた具合になります。この時TRIM関数を用いて下記のように記述すると空白を除去する事ができます。
REPLACE
文字列の一部を別の文字列に置換する関数です、「アソパソマソ」の「ソ」を「ン」に変換することで「アンパンマン」とすることができます。
REPLACE(置換対象の文字列, 置換前の部分文字列, 置換後の部分文字列) => 置換処理された文字列
SUBSTRING
文字列の一部分だけを抽出できる関数です。
SUBSTRING(文字列を表す列, 抽出を開始する位置, 抽出する文字の数) => 抽出された部分文字列
CONCAT
文字列を連結する関数です。
CONCAT(文字列, 文字列) => 連結後の文字列
数値にまつわる関数
ROUND
ROUNDは指定した位置で四捨五入した結果を返す関数です。
ROUND(数値を表す列, 有効とする桁数) => 四捨五入した値
POWER
POWERはべき乗した結果を返す関数です。
二乗などの場合は計算式として(2*2)などで実現できますが100乗等の場合いちいち書くのは面倒です。そんな作業をPOWER関数では簡単に実現できます。
POEWER(数値を表す列, 何乗するかを指定する数値) => 数値を指定した回数だけ乗じた結果
日付にまつわる関数
CURRENT_DATE, CURRENT_TIME
CURRENT_DATEは現在の日付、CURRENT_TIMEは現在の時刻を返す関数です。
CURRENT_DATE => 現在の日付(YYYY-MM-DD)
CURRENT_TIME => 現在の時刻(HH:MM:SS)
※CURRENT_DATE, CURRENT_TIMEは引数が不要なので後ろに()が付きません。
変数にまつわる関数
CAST
ある方のデータを別のデータに変換する関数です。例えば出金額という列があった時に末尾に「円」という文字列を連結して表示したいとします。「出金額 + '円'」としたいところですが数値と文字列という異なる型を||演算子で連結するのは定義されていない演算であります。そこで下記のように文字型を揃えてから連結することで期待する処理を実現できます。
CAST( 出金額 AS VARCHAR(20)) + '円'
COALESCE(コアレス)
COALESCEは複数の引数を受け取り、受け取った引数を左から順に評価し、その中から見つかったNULLでない引数を返す関数です。
COALESCE(列や式1, 列や式2, 列や式3) => 引数の内、最初に現れたNULLでない引数
参考
書籍: スッキリわかるSQL入門 第2版 ドリル222問付き!
中山 清喬 著/飯田 理恵子 著
次回
- 次回は[【SQLの集計とグループ化をおさらいしてみた】]です!