Skip to content
Advertisement

Calculating age derived from current date and DOB

I’m trying to calculate the age of a user based on the current year and his year of birth, but something in my syntax appears to be incorrect and I can’t spot it.

CREATE TABLE Normal_Users(

first_name varchar(20),
last_name varchar(20),
date_of_birth date,
age int = year(CURRENT_TIMESTAMP) - year(date_of_birth) 
)

Why is this incorrect?

Advertisement

Answer

Use AS:

CREATE TABLE Normal_Users(
first_name varchar(20),
last_name varchar(20),
date_of_birth date,
age int AS (year(CURRENT_TIMESTAMP) - year(date_of_birth))
);

Generated columns in MySQL

< type> [ GENERATED ALWAYS ] AS ( < expression> ) [ VIRTUAL|STORED ] [ UNIQUE [KEY] ] [ [PRIMARY] KEY ] [ NOT NULL ]
[ COMMENT ]

If you are using SQL Server there is no need for datatype in computed columns:

CREATE TABLE Normal_Users(
    first_name varchar(20),
    last_name varchar(20),
    date_of_birth date,
    age  AS (year(CURRENT_TIMESTAMP) - year(date_of_birth))
    );

LiveDemo

EDIT:

For calculating age better use:

SELECT TIMESTAMPDIFF( YEAR, date_of_birth,  CURDATE()) AS age;

Your code for 2014-12-31 and 2015-01-01 will return 1 year, but really it has 0.

User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement