MySQL で誕生日から年齢を計算する複数の方法

MySQL で誕生日から年齢を計算する複数の方法

以前はMySQLをあまり使用していなかったため、MySQLの機能にあまり詳しくありませんでした。この問題に遭遇したとき、Baiduで検索して、次の2つの方法を見つけました。この2つの方法は、Baiduのブログで1位にランクされていました。

方法1

DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(誕生日))、'%Y')+0 AS 年齢を選択

著者はまた、方法 1 の欠陥を指摘しています。それは、日付が将来の日付である場合、結果が負の数ではなく 0 になるということです。ここでは 5 つの関数と 2 つの演算子が使用されています。

方法2

DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(誕生日, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(誕生日, '00-%m-%d')) を年齢として選択します

方法 2 は方法 1 の負の数の問題を解決しますが、より複雑で、ここでは 6 つの関数と 3 つの演算子が使用されています。

この投稿を読んだ後、私は混乱しました。なぜこんなに複雑なのでしょうか? 以前は Sql Server を使用するのは非常に簡単でした。シンプルで効率的な方法があるはずだと私は固く信じています。上記の方法を改良した方法がすぐに見つかりました。

改良方法1と方法2

year( from_days( datediff( now( ), birthdate)));を選択します。
YEAR(CURDATE())-YEAR(誕生日)-(RIGHT(CURDATE(),5)<RIGHT(誕生日,5));を選択します。

改良された方法 1 では、関数と演算子が 1 つ少なくなっています。日付が将来の場合、計算結果は依然として 0 になります。
改良された方法 2 には、依然として 6 つの関数と 3 つの演算子があり、よりシンプルに見えます。日付の右側の 5 桁を取得する場合、日付形式が「2013-01-01」の場合、結果は「01-01」となり、問題ありません。日付形式が「2013-1-1」の省略形式の場合、結果は「3-1-1」となり、エラーが発生します。

そこで、MYSQL ヘルプ ドキュメントの日付関数に基づいた 3 番目の方法を思いつきました。

方法3

FLOOR(DATEDIFF(CURDATE(), @誕生日)/365.2422) を選択

誕生日から現在の日付までの日数を、実際の 1 年間の日数 (365 日、5 時間、48 分、46 秒) で割り、切り上げます。これは、3 つの関数と 1 つの演算子だけで実行されます。

その後、私はすぐに海外のウェブサイトで4番目の方法を見つけました。

方法4

 TIMESTAMPDIFF(YEAR, @birthday, CURDATE()) を選択

この方法では、タスクを完了するために 2 つの関数のみを使用するため、これが最適な方法であるはずです。

上記の 4 つの方法をテストした後、現在の日付が「2017-1-13」で、誕生日が「2013-1-14」の場合、誕生日まであと 1 日、4 歳まであと 1 日ですが、結果は依然として 3 歳であり、妥当ではないようです。方法 3 を変更して切り捨てると、方法 5 になります。

方法5

SELECT ROUND(DATEDIFF(CURDATE(), @birthday)/365.2422)

この方法で計算された年齢は実際の年齢に最も近いですが、方法 4 が年齢の定義と最も一致している可能性があります。

要約する

上記は、MySQL で誕生日から年齢を計算する方法について紹介したものです。お役に立てば幸いです。ご質問がある場合は、メッセージを残してください。すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • 生年月日で年齢を取得する PostgreSQL 操作
  • 生年月日を年齢に変換し、グループ化して人数を数えるMySQLの例
  • 日付関数で年齢を判断するための SQL サンプル コード

<<:  ZooKeeper をベースにした Hadoop 高可用性クラスタの構築のチュートリアル図

>>:  Ubuntu 18でターミナルを美しいコマンドラインプロンプトに変更する方法

推薦する

ウェブページ作成によく使われる英語フォント

アリアルArial は、多くの Microsoft アプリケーションとともに配布されるサンセリフ T...

CentOS8 デプロイメント LNMP 環境で mysql8.0.29 をコンパイルしてインストールする方法の詳細なチュートリアル

1. 前提条件何度かインストールしているので、エラーについてはこれ以上説明しません。ちょっとわかりに...

フォームタグの Enctype 属性とその応用例の紹介

Enctype : ブラウザがデータをサーバーに送り返すときに使用するエンコーディングのタイプを指定...

CSS で波の効果を作成するためのアイデア

以前、純粋な CSS を使用して波の効果を実現する方法をいくつか紹介しました。それらについては、次の...

CentOS6.7 mysql5.6.33 でデータファイルの場所を変更する方法

問題: MySQL がデータ ファイルを保存するパーティションの容量が小さく、現在いっぱいになってい...

VUE ユニアプリの基本コンポーネントの簡単な紹介

1. スクロールビュー垂直スクロールを使用する場合は、固定の高さを指定して CSS で高さを設定する...

Centos7 に Zabbix3.0 をインストールするための非常に詳細な手順

序文最近、同社の業務の一部がコンピュータルームに移転し、ホストリソースの監視と管理をより便利に行うた...

MySQL で group by を使用すると常にエラー 1055 が発生します (推奨)

MySQL で group by を使用すると常にエラー 1055 が発生するため、原因を確認する...

Vueでスワイパープラグインを使用する際の問題を解決する

デモを作成するときにこのプラグインを使用していくつか問題が発生したため、プラグインの使用方法といくつ...

MYSQL SERVER のログファイルを縮小する方法

トランザクション ログには、関連するデータベースに対する操作が記録され、データベースの回復に関連する...

localStorageの有効期限を設定するいくつかの方法

目次問題の説明1. 基本的な解決策2. 中間的な解決策3. 高度なソリューション4. ハードコアソリ...

MySQL に大量のデータを挿入するときに重複データを除外する方法

目次1. 問題を発見する2.重複したデータを残さずにすべて削除する3. 削除テーブルから重複データを...

Linuxディレクトリ構造の詳細な紹介

Linuxを学び始めるときは、まずLinuxの標準ディレクトリ構造を理解する必要があります。 / r...

mysql スケジュールタスク (イベント イベント) の詳細な説明

1. イベントの簡単な紹介イベントは、MySQL が特定の時間に呼び出す手続き型データベース オブジ...

IDEA の Docker プラグインを介して SpringBoot プロジェクトをデプロイするプロセスの詳細な説明

1. Dockerリモート接続ポートを設定するサーバー上の docker.service ファイルを...