这类作品:
SELECT *
FROM PatientDetails pd
WHERE DATEDIFF(CURRENT_DATE, STR_TO_DATE(pd.DOB, '%d-%m-%Y')) / 365 < 19
将天数除以 365 将无法适应闰年,这意味着您将保证休假 4 天。您可以除以 365.25,然后减去 0.75。我认为这说明了一切,但我有点从臀部射击。我不确定这个计算是否会出现整数错误。我不确定 MySQL 如何处理隐式类型转换。
我会更倾向于这样做。从逻辑上讲,它是“所有未来 19 岁生日的患者”:
SELECT *
FROM PatientDetails pd
WHERE DATE_ADD( STR_TO_DATE(pd.DOB, '%d-%m-%Y'), INTERVAL 19 YEAR ) > CURDATE()
然而,这个确切的问题在日期计算的 MySQL 文档中得到了解决和解释,但对我来说似乎有点倒退:
SELECT name, birth, CURDATE(),
(YEAR(CURDATE())-YEAR(birth))
- (RIGHT(CURDATE(),5)<RIGHT(birth,5))
AS age
FROM pet