根据年,月和日字段计算年龄

时间:2020-10-01 08:16:55

标签: mysql

我有一张桌子,我需要知道其中有多少是未成年人。

我有以下查询:

SELECT count(*) as minors from 
FilesMain a INNER JOIN Sides b
ON a.FileID = b.FileID 
INNER JOIN SideData c 
ON b.SideDataID = c.SideDataID
WHERE a.StatusCode IN (100,101) AND (YEAR(CURDATE()) - BirthYear<17)

基本上在上面的查询中,我正在计算当前日期年份减去BirthYear字段。

我在3个不同的字段中将人的出生日期分别分为。请不要问为什么。我继承了数据。使用“月”和“日”字段以获得更具体结果的正确方法是什么。仅使用Year即可将一月一号和12月31日出生的人待遇相同。

谢谢

1 个答案:

答案 0 :(得分:2)

... AND TIMESTAMPDIFF(YEAR, 
                      CONCAT_WS('-', BirthYear, BirthMonth, BirthDay), 
                      CURRENT_DATE) < 17

您还可以添加生成的列:

ALTER TABLE tablename
ADD COLUMN DOB DATE 
    GENERATED ALWAYS AS (CONCAT_WS('-', BirthYear, BirthMonth, BirthDay));

并使用此列代替上面的表达式。