En realidad hay una forma mucho más simple, incluso para hacer ese cálculo tan largo que realizas:
Código sql:
Ver originalSELECT id, nombre, apellido, fechadenacimiento
FROM persona
WHERE TIMESTAMPDIFF(YEAR, DATE(fechadenacimiento), DATE(NOW()))>=20;
TIMESTAMPDIFF(unidad, fecha1, fecha2) te devuelve un entero que representa la cantidad de unidades (YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, WEEK, etc.) completas indicada por
unidad entre
fecha1 y
fecha2, siendo
fecha2 la mayor de las fechas.
Como TIMESTAMPDIFF opera sobre fechas DATETIME (esto es: "yyyy-MM-dd HH:mm:ss"), en ese caso hay que "cortar" el valor con la función DATE(), de lo contrario, tomará también en cuenta la hora de cada valor para hacer la resta.