この種の作品:
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