0

データベースにリストされている人々の年齢を特定しようとしています。これは私が思いついたものですが、18 歳以下の人だけを表示するようにクエリを制限することはできないようです。

SELECT 
  * 
FROM 
  patientdetails 
WHERE 
  ageInYears IN (
    SELECT 
      DATEDIFF(CURRENT_DATE, STR_TO_DATE(p.DOB, '%d-%m-%Y'))/365 AS ageInYears 
    FROM 
      patientdetails p
  ) < 19
4

3 に答える 3

1

私はこのようなものがうまくいくと信じています:

SELECT * 
FROM patientdetails 
WHERE DATEDIFF(CURRENT_DATE, STR_TO_DATE(p.DOB, '%d-%m-%Y'))/365 < 19
于 2012-10-01T19:38:10.653 に答える
0

この種の作品:

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
于 2012-10-22T02:53:31.613 に答える
0

サブクエリは必要ありません:

SELECT *
FROM PatientDetails pd
WHERE DATEDIFF(CURRENT_DATE, STR_TO_DATE(p.DOB, '%d-%m-%Y'))/365 <19
于 2012-10-01T19:38:03.620 に答える