MySQL 組み込み関数で年齢表示

Workbench の驚異的機能 / ER図生成

今更いうまでもないが、この連載ではUbuntuMySQLの基本的知識を紹介する意図はまったくない。そんな記事はすでに無数に存在するし、それらのおかげで自分自身のITリハビリも順調に進んでいるので感謝しかないと書いておこう。
データベース構築管理のほぼすべての機能をGUIで可能にしてくれるWorkbenchは欠かせないツールである。
ということで。Workbenchそのものの紹介もしないが今回ひとつだけ。

このようなER(関係)図がいとも簡単に生成できるのが最高。図中では受注マスタとその明細テーブル間でリレーションシップが形成されているように見えるが、実際にはこの時点で双方のテーブルには何も設定していない。
ER図の中で仮想的に描画させているだけなのだ。全体設計図として活用出来るわけである。
それだけではなく関係性を描画した結果をそのままデータベースに反映させることも可能になっている。
MySQL自体もそうだがこのようなリレーショナルデータベースに不可欠の高度なツールが無償提供されているのは驚異的であり、作成者グループには敬意及び感謝するしかない。
WorkbenchでのER図作成はホーム画面からになる。認知機能低下疑惑がある自分は忘れがちなので、メモしておく。

さて、タイトルの関数について。
あくまでも自分自身が直面している課題を順次クリアしていく中で、少なくとも最後の実務運用経験していた MySQL5.7 までの古い知識では、データベースの組み込み関数では年齢表示が出来なかった。
しかし、現時点での最新版MySQL 8.0 ではさすがにいろいろと進化している。
より柔軟でより便利に使える機能が満載なのが分かって、ちょっとうれしくなって来た。
記事作成をさぼっていても、着々とシステムづくりは進行はしているのです。

ありきたりな名簿のサンプルデータだが、年齢カラムがデータ作成時点の計算値が数値としてそのまま格納されている。
このままでは実用にならないので、年齢演算用のカスタム関数(function)を作成して・・・というのが常識だった。

MySQLでの年齢計算の関数とは
  • Stored functionを”年齢”など適当な名前で作成
  • YEAR関数とCURRENT_DATE関数を組み合わせて生年月日と現在日付との年数差を算定
  • 生年月日と現在日付の月日部分を切り出して比較
  • 現在日付が小さければ年数から 1 を減ずる
  • 計算結果を呼び出し元SQLの結果として返す

こんな単純な機能で、 function 作成の手始めとしては良かったし気分良く利用していた。
いや、まったく無知だったのだがちゃんと用意されていたのを知らなかっただけ。

TIMESTAMPDIFF(単位,過去の日付,比較対象日付)関数がとっくに存在していたのだった。サンプルデータでは、

timestampdiff(year,生年月日,curdate()) as 年齢

となる。年齢計算結果としてたしかに合っている。

そんなわけで、組み込み関数だけで簡単に年齢を得られるのだから元のテーブルの”年齢”カラムは削除してしまって良いということになる。
だからどうしたといえば、MySQLの最新機能の学習を常に知っておかないとムダなコスト(自分の時間と労力)が発生してしまうという当たり前の教訓なのでした。😅

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA