我有一张桌子,我需要知道其中有多少是未成年人。
我有以下查询:
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日出生的人待遇相同。
谢谢
答案 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));
并使用此列代替上面的表达式。