我正在尝试确定数据库中列出的人员的年龄。这就是我想出来的,但我似乎无法限制查询以显示只有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
答案 0 :(得分:1)
我相信这样的事情应该有效:
SELECT *
FROM patientdetails
WHERE DATEDIFF(CURRENT_DATE, STR_TO_DATE(p.DOB, '%d-%m-%Y'))/365 < 19
答案 1 :(得分:0)
您不需要子查询:
SELECT *
FROM PatientDetails pd
WHERE DATEDIFF(CURRENT_DATE, STR_TO_DATE(p.DOB, '%d-%m-%Y'))/365 <19
答案 2 :(得分: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 documentation for date calculations中得到解决和解释,但对我来说似乎有点ass:
SELECT name, birth, CURDATE(),
(YEAR(CURDATE())-YEAR(birth))
- (RIGHT(CURDATE(),5)<RIGHT(birth,5))
AS age
FROM pet