MySQLテーブルに保存された日付にEXTRACT()関数を適用する方法
MySQLのテーブルに保存されている日付データから、年・月・日などの特定の部分だけを取り出したい場合、EXTRACT()関数を使用すると便利です。この記事では、実際のテーブルを使いながら、EXTRACT()関数の基本的な使い方を解説します。
サンプルテーブルの確認
まず、以下のクエリで「testing」テーブルに登録されている日付データを確認してみましょう。
mysql> Select * from testing; +-------------+---------------------+ | StudentName | Dateofreg | +-------------+---------------------+ | Ram | 2017-10-28 21:24:24 | | Shyam | 2017-10-28 21:24:30 | | Mohan | 2017-10-28 21:24:47 | | Gaurav | 2017-10-29 08:48:33 | +-------------+---------------------+ 4 rows in set (0.00 sec)
EXTRACT()関数で「年」を抽出する
次に、EXTRACT()関数を使って、「Dateofreg」カラムから年(Year)の値を取り出します。構文は「EXTRACT(単位 FROM カラム名)」の形式で記述します。
mysql> Select EXTRACT(Year from dateofreg) AS YEAR from testing; +------+ | YEAR | +------+ | 2017 | | 2017 | | 2017 | | 2017 | +------+ 4 rows in set (0.00 sec)
このように、すべてのレコードから登録日の「2017」という年の値が抽出されました。
EXTRACT()関数で「日」を抽出する
同様の方法で、日(Day)の値も抽出できます。「Year」の部分を「Day」に変更するだけでOKです。
mysql> Select EXTRACT(day from dateofreg) AS DAY from testing; +-----+ | DAY | +-----+ | 28 | | 28 | | 28 | | 29 | +-----+ 4 rows in set (0.00 sec)
EXTRACT()関数で指定できる主な単位
EXTRACT()関数では、上記以外にもさまざまな単位を指定できます。主なものは以下のとおりです。
- MONTH:月を抽出
- HOUR:時を抽出
- MINUTE:分を抽出
- SECOND:秒を抽出
- YEAR_MONTH:年と月を組み合わせて抽出(例:201710)
- DAY_HOUR:日と時を組み合わせて抽出
まとめ
EXTRACT()関数を使えば、DATETIME型やDATE型のカラムから、年・月・日・時刻など必要な部分だけを簡単に取り出せます。GROUP BY句と組み合わせれば「月別の集計」などにも活用できるため、実務でも頻繁に使われる便利な関数です。
-
MySQLの関数からテーブル(結果セット)を返す方法|ストアドプロシージャの使い方
MySQL関数ではテーブルを返せない結論から言うと、MySQLの関数(FUNCTION)からテーブルや結果セットを返すことはできません。MySQLの関数が返せるのは、文字列、整数、CHAR型などのスカラー値に限られます。テーブル形式のデータ(複数行・複数列の結果セット)を返したい場合は、関数ではなくストアドプロシージャ(Stored Procedure)を使用しましょう。この記事では、実際にサンプルテーブルを作成し、ストアドプロシージャで結果セットを取得する手順を解説します。サンプルテーブルの作成まず、以下のようにCREATE TABLE文でテーブルを作成します。mysql> creat
-
MySQLでBOOLEAN型として保存された性別の値を文字列(MALE/FEMALE)として抽出する方法
はじめにMySQLでは、BOOLEAN型のカラムは内部的にTINYINT(1)として扱われ、trueは「1」、falseは「0」として保存されます。そのため、表示の際には数値ではなく「MALE」や「FEMALE」のような文字列に変換して取得したいケースがよくあります。本記事では、IF関数を使ってブール値を文字列として抽出する方法を解説します。サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable815(Gender BOOLEAN);Query OK, 0 rows affected (0.84 sec)レコードの挿入