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.
x
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))
);
< 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))
);
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.