第4章 関数

算術関数

関数

コンピュータプログラムで利用される関数とは、繰り返し利用されるルーチン作業をモジュールとしてまとめたものです。

関数とは引数と返却値があります。利用時は、次に用に関数名と引数を指定します。

FUNCTION(X)

引数Xに値を指定すると、その値に対応した処理が行われれ、返却値が返されます。

SQLでは、計算をしたり、データの検索や集計、データの整形をする関数が用意されています。関数の種類を大きく分類すると、集計を行うための集計関数、数学的な算術関数、文字列を扱うための文字列関数、日付を操作するための日付関数に分類されます。

算術関数

小数点以下の値を切り捨てるCEILING関数、値を四捨五入して返すROUND関数、値を指定した小数点以下で切り捨てて返すTRUNCATE関数などはよく使う関数です。最初は扱いが難しいかもしれませんが、最初は使い方よりもどのような関数があるかを把握し、実践で徐々に覚えていくと良いかもしれませんね。

すべての数学関数はエラーの場合NULLを返します。

ABS(X)
絶対数

ABS()は、引数Xの絶対数を返します。引数Xには整数値型、実数値型の数値型を指定できます。返却値の型は引数と同じになります。

SELECT ABS( -10 );
-> 10

SELECT ABS( 10 );
-> 10

SELECT ABS( -5 );
-> 5

SELECT ABS( 5 );
-> 5
【絶対数】

絶対数とは、他の数との差や比ではなく、そのものが幾つあるかという数。正の値はそのまま、負の値は正にした数値。

ACOS(X)
アークコサイン(逆コサイン)

ACOS()は、引数Xのアークコサインを返します。引数Xには実数値型の数値(-1.0~1.0)を指定できます。

SELECT ACOS( 1 );
-> 0

SELECT ACOS( 0 );
-> 1.5707963267949

引数Xの値が -1.0 から 1.0 の範囲を越える場合はNULLを返します。

SELECT ACOS( 1.5 );
-> NULL

ASIN(X)
アークサイン(逆サイン)

ASIN()は、引数Xのアークサインを返します。引数Xには実数値型の数値(-1.0~1.0)を指定できます。

SELECT ASIN( 0.5 );
-> 0.5235987755983

引数Xの値が -1.0 から 1.0 の範囲を越える場合はNULLを返します。

SELECT ASIN( 1.5 );
-> NULL

ATAN(X)
アークタンジェント(逆タンジェント)

ATAN()は、引数Xのアークタンジェントを返します。引数Xには数値を指定できます。

SELECT ATAN( 5 );
-> 1.373400766945

ATAN2(X, Y)
アークタンジェント(逆タンジェント)

ATAN2()は、引数X、引数Yで指定した数値のアークタンジェントを返します。引数X、引数Yには数値を指定できます。

SELECT ATAN( 2, 1 );
-> 1.1071487177941

SELECT ATAN( PI(), 0 );
-> 1.5707963267949

CEILING(X)
最小の整数値を返す

CEILING()は、引数Xに指定した数値に小数点以下の数値があれば、整数に丸めて返します。FLOOR()とは違い、正の数は切り上げ、負の数は切り捨てになります。

SELECT CEILING( 1.2 );
-> 2

SELECT CEILING( -4.5 );
-> -4

COS(X)
コサイン

COS()は、引数Xのコサインを返します。引数Xにはラジアン単位の数値を指定します。

SELECT COS( PI() );
-> -1

SELECT COS( 2.0 );
-> -0.41614683654714

SELECT COS( -2.0 );
-> -0.41614683654714

COT(X)
コタンジェント

COT()は、引数Xのコタンジェントを返します。引数Xにはラジアン単位の数値を指定します。引数Xに0を指定した場合は計算できず、NULLが返されます。

SELECT COT( 10 );
-> 1.5423510453569

SELECT COT( 0 );
-> NULL

DEGREES(X)
ラジアンを度に変換

DEGREES()は、引数Xに指定した数値をラジアンから度(ディグリー)に変換して返します。度からラジアンに変換するには、RADIANS()を使います。

SELECT DEGREES( PI() );
-> 180

SELECT DEGREES( 1.25 );
-> 71.619724391353

EXP(X)
指数関数

EXP()は、e(自然対数の底)を引数Xで指定した数値で乗算して返します。

SELECT EXP( 1.0 );
-> 2.718281828459

SELECT EXP( 1.5 );
-> 4.4816890703381

FLOOR(X)
最大の整数値を返す

FLOOR()は、引数Xの値に小数点以下の数値があれば、整数に丸めて返します。正の数は切り捨て、負の数は切り上げです。引数Xには数値を指定できます。

SELECT FLOOR( 1.2 );
-> 1

SELECT FLOOR( -1.2);
-> -2

GREATEST(X1, X2, ...)
最大値

GREATEST()は、引数リストの中で最大の値を返します。最小値を返すには、LEAST()を使います。

SELECT GREATEST( 5, 30, 19, 73 );
-> 73

GREATEST()の引数リストには文字列や日付型を渡すこともできます。

SELECT GREATEST( 'N', 'W', 'A' );
-> W

LEAST(X1, X2, ...)
最小値

LEAST()は、引数リストの中で最小の値を返します。最大値を返すには、GREATEST()を使います。

SELECT LEAST( 5, 30, 19, 73 );
-> 5

LEAST()の引数リストには文字列や日付型を渡すこともできます。

SELECT LEAST( 'N','W','A' );
-> A

LOG(X)
自然対数

LOG()は、引数Xの自然対数を返します。

SELECT LOG( 2.0 );
-> 0.69314718055995

SELECT LOG( 20.0 );
-> 2.995732273554

自然対数 -Wikipedia
http://ja.wikipedia.org/wiki/%E8%87%AA%E7%84%B6%E5%AF%BE%E6%95%B0

LOG10

常用対数

LOG10()は、引数Xの常用対数を返します。

SELECT LOG10( 10 );
-> 1

SELECT LOG10( 20 );
-> 1.301029995664

SELECT LOG10( -2.0 );
-> NULL 

対数 -Wikipedia
http://ja.wikipedia.org/wiki/%E5%B8%B8%E7%94%A8%E5%AF%BE%E6%95%B0

MOD(N, M) / %
剰余

MOD()は、引数Nを引数Mで割り、そのあまりを返します。

SELECT MOD( 7, 2 );
-> 1

SELECT 7 % 2;
-> 1 

SELECT 7 MOD 2;
-> 1

PI()
π

PI()は、円周率π(3.141592)を返します。

SELECT PI();
-> 3.141593

POW(X, Y) / POWER(X, Y)
べき乗

POW()は、引数XのY乗を返します。

# 2の2乗
SELECT POW( 2, 2 );
-> 4

# 2の10乗
SELECT POW(2, 10);
-> 1024

RADIANS(X)
度をラジアンに変換

RADIANS()は、引数Xを度(ディグリー)からラジアンに変換して返します。πラジアンは100ディグリーと等価です。ラジアンから度に変換するには、DEGREES()を使います。

SELECT RADIANS( 5 );
-> 0.087266462599716

RAND(x)
乱数

RAND()は、 0から1.0までの範囲の浮動小数点の乱数を返します。

SELECT RAND();
-> 0.061605433990811


# 同じクエリですが、返却値はランダムで変わります。
SELECT RAND();
-> 0.54335564239263

引数Nを指定した場合は、それをシード値として使います。

SELECT RAND( 5 );
-> 0.40613597483014

SELECT RAND( 20 );
-> 0.15888261251047

RAND()関数とFLOOR()関数の組み合わせで、指定した範囲の整数をランダムに取得することができます。

SELECT FLOOR( 最小の値 + (RAND() * 最大の値-最小の値+1) )

たとえば、10から15の範囲にある整数をランダムに得るには、次のクエリを使うことができます。

SELECT FLOOR( 10 + (RAND() * 6) );
-> 15

ROUND(X)
四捨五入

ROUND()は、引数Xの値に小数点以下の数値があれば、小数点以下を四捨五入して返します。

SELECT ROUND( -1.25 );
-> -1

ROUND(X, D)のように引数が2つある場合、第1引数Xを第2引数Dで指定した少数桁に四捨五入して返します。Dが 0 の場合は整数の部分だけが返されます。

SELECT ROUND( 1.234, 1 );
-> 1.2

SIGN(X)
符号を返す

SIGN()は、引数Xの符号を返します。引数Xが負数のとき -1、ゼロのとき 0、整数のとき 1 を返します。

SELECT SIGN( -10 );
-> -1

SELECT SIGN( 0 );
-> 0

SELECT SIGN( 5 );
-> 1

SIN(X)
サイン

SIN()は、引数Xのサインを返します。引数Xにはラジアンで指定します。引数Xにはラジアン単位の数値を指定できます。

SELECT SIN( PI() );
-> 1.2246063538224e-16

SELECT SIN( 2.0 );
-> 0.90929742682568

SELECT SIN( 1.0 );
-> 0.8414709848079

SQRT(X)
平方根

SQRT()は、引数Xの平方根を返します。引数Xに不の値を指定することはできません。返却値は実数値型です。

# 9の平方根を求める(3×3=9)
SELECT SQRT( 9 );
-> 3 

# √2の解を求める
SELECT SQRT( 2 );
-> 1.4142135623731
平方根
平方根とは、2乗するとXになる数です。
元の数値を正方形の面積とすると、平方根は辺の長さに当たります。

TAN(X)
タンジェント

TAN()は、引数Xのタンジェントを返します。引数Xにはラジアン単位の数値を指定できます。返却値は実数値型です。

SELECT TAN( PI() + 1 );
-> 1.5574077246549

TRUNCATE(X, D)
切り捨て

TRUNCATE()は、引数Xの値を少数点以下D桁で切り捨てます。引数Dの値が 0 の場合は整数の部分だけを返します。

SELECT TRUNCATE( 1.26, 1 );
-> 1.2

SELECT TRUNCATE( 1.26, 0 );
-> 1

関連記事