代表的なSQL関数
SQL文内で関数を利用する書式は以下の通りです。関数によっては引数が無いものや複数あるものなど様々です。
関数名([引数, [引数, ... ]])
数値関数
整数や小数などの数値を演算するための関数です。MySQLには一般的な数値演算に必要となる関数は用意されています。
四則演算関連 | +, -, *, /, DIV, %, MOD, POW, POWER, SQRT |
ビット演算 | &, <<, >>, BIT_COUNT, ^, |, ~ |
四捨五入関連 | CEIL, CEILING, FLOOR, TRUNCATE |
絶対値関連 | ABS, SIGN |
三角関数関連 | SIN, COS, COT, TAN, ACOS, ASIN, ATAN, ATAN2, DEGREES, RADIANS, PI |
その他 | CRC32, EXP, LN, LOG, LOG10, LOG2, OCT |
文字関数
MySQLには様々な文字列を操作する関数が用意されています。例えばCASTは文字列を数値型など他のデータ型に、LCASEとUCASEはそれぞれアルファベットを全て小文字と大文字に変換する関数です。他にも指定した文字数を左側と右側から取得するLEFTやRIGHT、文字列の長さを取得するLENGTH、文字列を連結するCONCATなども使用頻度が高い関数です。
日時関数
日付や時刻に関する関数です。NOWなど現在の日時を取得する関数や、日時の値から年YEAR、月MONTH、日DAY、時TIME、分MINUTE、秒SECOND、ミリ秒MICROSECONDを取得する各関数などが利用できます。他にもその年の何日目にあたるかを調べるDAYOFYEARもあります。また、日付や時刻の表示形式を変換するDATE_FORMATやTIME_FORMATも便利な関数です。
フロー制御関数
プログラム言語におけるIFやCASEと同様に、IFやCASEの各関数を使用することで条件によって返す値を変えることができます。特殊なパターンはNULLが関連する場合で、値がNULLかそうでないかで返す値を変更するIFNULLと、与えられた条件式が真の場合にNULLを返すNULLIFがあります。
暗号化関数
MySQLはデータを暗号化して格納できますが、アプリケーションが明示的にMySQLの暗号化関数を使用してデータを暗号化する必要があります。
AESまたはDESでデータを暗号化するAES_ENCRYPTとDES_ENCRYPTが利用可能で、それぞれに対応した復号化関数AES_DECRYPTとDES_DECRYPTが用意されています。 MySQLサーバがユーザのパスワードを管理する際の暗号化の処理はPASSWORD関数で利用できますが。ただしPASSWORDで暗号化した値は復号化する関数がありません。
暗号化とは直接関連しませんが、データのハッシュ値を求める関数は以下の3種類用意されています。
関数 | アルゴリズム |
MD5 | MD5 128-bit |
SHA1 | SHA-1 160-bit |
SHA2 | SHA-2 (ビット数は明示的に指定) |
また、データを圧縮および展開するCOMPRESSおよびUNCOMPRESSも利用可能です。
その他の関数
上記の各カテゴリに当てはまらない関数も多数あります。
関数 | 詳細 |
UUID | 実行するたびに一意なUUID(汎用一意識別子)を生成する |
SLEEP | 指定した秒数処理を停止する |
BENCHMARK | 指定した処理を指定した回数繰り返す |
他に、現在接続しているユーザがログイン時に指定したアカウント名を表示するUSER(SESSION_USERとSYSTEM_USERはUSERと同じ)と、接続しているユーザの認証時にサーバが使用したアカウント名を表示するCURRENT_USERもあります。これらの関数についてはMySQLのセキュリティに関する回で解説予定です。