私はこれまで mysql をあまり使用したことがなかったので、mysql 関数にあまり詳しくありませんでしたが、この問題に遭遇したとき、すぐに Baidu を検索したところ、これら 2 つの方法が Baidu のブログで 1 位にランクされていました。
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age
方法 1 では、作成者も欠陥を指摘しました。つまり、日付が将来の日付の場合、結果は負の数ではなく 5 つの関数と 2 つの演算子が使用されます。
SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birthday, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(birthday, '00-%m-%d')) AS age
方法 2 は方法 1 の負の数の問題を解決しますが、ここでは 6 つの関数と 3 つの演算子がより複雑に見えます。
この投稿を読んだ後、以前は SQL Server を使用するのはとても簡単だったのに、どうしてこんなに複雑だったのでしょうか?と驚きました。シンプルで効率的な方法が必ずあると私は強く信じています。上記の方法に基づいて改良された方法がすぐに見つかりました。
SELECT year( from_days( datediff( now( ), birthdate))); SELECT YEAR(CURDATE())-YEAR(birthday)-(RIGHT(CURDATE(),5)<RIGHT(birthday,5));
改善された方法 1、関数が 1 つ減り、演算子が 1 つ欠落しました。日付が将来の日付の場合、計算結果は依然として 0 になります。
改善された方法 2、関数は 6 つあります。 3 つの演算子を使用すると、日付の右 5 桁を取得し、日付形式が「2013-01-01」の場合は「01-01」になりますが、日付形式が「2013-In」の場合は問題ありません。 1-1' の省略形式では、右側の 5 桁を取ると '3-1-1' となり、エラーが発生します。
次に、MYSQL ヘルプドキュメントの date 関数に基づいた 3 番目の方法を考えました。
SELECT FLOOR(DATEDIFF(CURDATE(), @birthday)/365.2422)
誕生日と現在の日付までの日数を取得し、それを実際の日数で割ります。年(365日、5時間、48分、46秒)を切り上げます。これは 3 つの関数と 1 つの演算子のみを使用します。
その後、私はすぐに海外のウェブサイトで4番目の方法を見つけました:
SELECT TIMESTAMPDIFF(YEAR, @birthday, CURDATE())
この方法は2つの関数だけを使用しており、これが最良の方法であるはずです。
現在の日付が「2017-1-13」、誕生日が「2013-1-14」の場合、誕生日は 1 日違いで、誕生日は 4 日だけ違います。歳です。結果はまだ 3 歳ですが、これはあまり合理的とは思えません。方法 3 を変更して方法 5 を取得します。しかし、おそらく方法 4 が最も一貫した年齢定義です。
1.
無料のmysqlオンラインビデオチュートリアル以上がMySQL で年齢を計算する 5 つの方法とそれぞれの利点と欠点をまとめます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。