首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MySQL 根據生日精確計算年齡查詢

     編輯:程式設計綜合問答

需求描述

資料表含 birthday (DATE 型別),需查詢年齡大於、等於、小於指定值 N 的記錄,精確到天。

核心邏輯

年齡 = 當前日期與生日的年份差,再根據「今年生日是否已過」微調:

SELECT *,
       TIMESTAMPDIFF(DAY, birthday, CURDATE()) DIV 365 AS age_years
FROM users;

精確查詢範例

-- 年齡 > N
SELECT * FROM users
WHERE TIMESTAMPDIFF(DAY, birthday, CURDATE()) > N * 365.25;

-- 年齡 = N (精確到天)
SELECT * FROM users
WHERE TIMESTAMPDIFF(DAY, birthday, CURDATE()) BETWEEN N * 365.25 AND (N+1) * 365.25 - 1;

-- 年齡 < N
SELECT * FROM users
WHERE TIMESTAMPDIFF(DAY, birthday, CURDATE()) < N * 365.25;

更嚴謹的寫法(避免閏年誤差)

-- 計算精確年齡(歲)
SELECT FLOOR(DATEDIFF(CURDATE(), birthday) / 365.25) AS age
FROM users;

效能建議

  • 若頻繁查詢年齡範圍,可新增 age 欄位並建立索引,透過排程/觸發器每日更新。
  • 避免在 WHERE 條件中對欄位使用函數(如 YEAR(birthday)),導致索引失效;改用範圍查詢:birthday BETWEEN DATE_SUB(CURDATE(), INTERVAL (N+1) YEAR) AND DATE_SUB(CURDATE(), INTERVAL N YEAR)。

善用 MySQL 日期時間函數,能簡潔實現精確年齡計算與篩選。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved