その他の基本的な関数

第2章では関数の基本と集計関数を説明しましたが、本章ではそれ以外によく使われる関数について解説します。
本章の目標
  • 文字列関数の基本をおぼえる
  • 日付関数の基本をおぼえる
ページの先頭へ
ページの先頭へ

1.文字列関数

ここでは、文字列を処理するための関数をいくつか取り上げます。

1. CHAR_LENGTH関数

文字列の長さを取得する関数です。
書式は下記のようになります。

SELECT CHAR_LENGTH(列名) FROM テーブル名;

「bookinfo」テーブルの書籍タイトルの文字列の長さを取得したい場合、下記のようになります。

SELECT CHAR_LENGTH(title) FROM bookinfo;






最後の行は値がないので、表示上は「NULL」となります。


2. CONCAT関数

文字列を連結する関数です。
書式は下記のようになります。

SELECT CONCAT(文字列A,文字列B) FROM テーブル名;

「bookinfo」テーブルの書籍タイトルに、「書籍名は、」と付け加えたい場合は下記のようになります。

SELECT CONCAT('書籍名は、',title) FROM bookinfo;






最後の行は値がないので、文字列連結の対象外になります。

3つ以上の文字列を連結することも出来ます。
「bookinfo」テーブルの書籍タイトルに、「書籍名は、」と「です。」付け加えたい場合は下記のようになります。

SELECT CONCAT('書籍名は、',title,'です。') FROM bookinfo;



またテーブルの列を連結することも出来ます。
「bookinfo」でISBN番号と書籍名を連結する場合は、

SELECT CONCAT(isbn,title) FROM bookinfo;

のようになります。





3. SUBSTRING関数

部分文字列を取り出す関数です。
書式は下記のようになります。

SELECT SUBSTRING(文字列,取り出し開始位置,取り出す文字列数) FROM テーブル名;

「bookinfo」テーブルの書籍タイトルの1文字目から3文字取り出したい場合は、

SELECT SUBSTRING(title,1,3) FROM bookinfo;





第3引数を省略すると、取り出し開始位置から、最後まで取り出します。

SELECT SUBSTRING(title,4) FROM bookinfo;

上記の指定は、書籍タイトルの4文字目から最後までを取り出しています。

最後の行は値がないので、文字列抽出の対象外になります。




ページの先頭へ

2.日付関数

ここでは、日付を処理するための関数をいくつか取り上げます。

1. CURDATE関数

現在の日付を取得する関数です。
この関数は、引数をとりません。下記のように記述すると、現在の日付を取得できます。

SELECT CURDATE();



※今日が2010年9月13日の場合です。


MySQLのSELECT文では、参照するテーブルがなく、単にデータを表示したいような場合は「FROM」句を省略できます。
例えば、単に「A」という文字列を表示したい場合は、

SELECT 'A';

と記述できます。




2. YEAR関数、MONTH関数、DAY関数

それぞれ日付から年、月、日を取得する関数です。
書式は下記のようになります。

SELECT YEAR(列名) FROM テーブル名;
SELECT MONTH(列名) FROM テーブル名;
SELECT DAY(列名) FROM テーブル名;

「orderinfo」の注文日からそれぞれ年、月、日を取得してみましょう。
まず年です。

SELECT YEAR(date) FROM orderinfo;





次は月を取得してみましょう。

SELECT MONTH(date) FROM orderinfo;





最期に日を取得してみましょう。

SELECT DAY(date) FROM orderinfo;






3. DAYNAME関数

引数で与えられた日付の曜日を取得する関数です。
書式は下記のようになります。

SELECT DAYNAME(列名) FROM テーブル名;

「orderinfo」テーブルの注文日付の曜日を取得する場合は、

SELECT DAYNAME(date) FROM orderinfo;

のようになります。






その他の関数には、下記のようなものがあります。

カテゴリ 関数名 機能
数値関数 ABS絶対値を求める
MOD剰余を求める
FLOOR小数点以下を切り下げる
CEILING小数点以下を切り上げる
CEIL小数点以下を切り上げる
ROUND小数点以下を四捨五入する
POW累乗(べき乗)を求める
POWER累乗(べき乗)を求める
SIGN符号を調べる
RAND乱数を生成する
LEAST最小値を調べる
GREATEST最大値を調べる
TRUNCATE小数点第N位で切り捨てる
FORMAT数値を整形する
文字列関数 ASCII1文字目のアスキーコードを調べる
ORD1文字目の文字コードを調べる
CHAR文字コードを文字に変換する
CONCAT_WS文字列を結合する(区切文字を間に挟む)
LENGTH文字列のバイト数を調べる
BIT_LENGTH文字列のビット数を調べる
LOCATE特定の文字列が最初に出現する位置を調べる
POSITION特定の文字列が最初に出現する位置を調べる
INSTR特定の文字列が最初に出現する位置を調べる
LPAD特定の文字を左側に追加して文字列の長さを整える
RPAD特定の文字を右端に追加して文字列の長さを整える
LEFT文字列の左側から文字列を取り出す
RIGHT文字列の右側から文字列を取り出す
MID文字列から位置を指定して文字列を取り出す
SUBSTRING_INDEX区切り文字列N個目までの文字列を取り出す
CONVX進数をY進数へ変換する
LTRIM文字列の左側から半角スペースを削除する
RTRIM文字列の右側から半角スペースを削除する
TRIM文字列の両側から特定の文字列を削除する
SPACE任意の数の半角スペースを生成する
LOWERアルファベット大文字を小文字に変換する
UPPERアルファベット小文字を大文字に変換する
変換関数 CAST型を変換する
BIN10進数の整数を2進数に変換する
OCT10進数の整数を8進数に変換する
HEX10進数の整数を16進数に変換する
日付・時刻関数 DATE日時から日付を取り出す
DAYOFWEEK日付の曜日を調べる
DAYOFMONTH年月日から日を取り出す
DAYOFYEAR日付がその年の1月1日から何日目かを調べる
MONTHNAME日付の月の英語名称を調べる
HOUR時刻から時を取り出す
MINUTE時刻から分を取り出す
SECOND時刻から秒を取り出す
システム関数 DATABASE接続中のデータベースを確認する
USER接続時に指定されたユーザー名を確認する
VERSIONMySQLサーバのバージョンを確認する


※MySQLにはこれ以外にも関数が用意されています。それぞれの関数の使い方については、MySQLのマニュアルを参照してください。 また、他のRDBMSでも、これ以外の関数が存在したり、同じ機能をもつものでも、関数名や書式が違う場合があります。 詳しくは、それぞれのマニュアルを参照してください。


ページの先頭へ

3.本章のまとめ

本章で解説した関数は全体のごく一部ですが、まずは関数がどんな機能を持ち、どういった方法で使用するかを把握してください。 関数を全て記憶する必要はありませんが、マニュアルをみて使える程度には理解する必要があります。 関数を使うだけで、複雑なSQLを簡略化したり、開発工数を削減できたりしますので、積極的に使用することをお勧めします。

ページの先頭へ