我想根據當前年份和出生年份來計算用戶的年齡,但是我的語法中的某些內容似乎不正確,我無法發現它。從當前日期和生效計算得出的年齡
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)
)
爲什麼這是不正確的?
我想根據當前年份和出生年份來計算用戶的年齡,但是我的語法中的某些內容似乎不正確,我無法發現它。從當前日期和生效計算得出的年齡
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)
)
爲什麼這是不正確的?
使用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 ALWAYS] AS(<表達>) [ VIRTUAL | STORED] [UNIQUE [KEY]] [[PRIMARY] KEY] [NOT NULL]
[註釋]
如果您正在使用SQL Server
沒有必要對於數據類型在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))
);
編輯:
爲了計算時代更好地利用:
SELECT TIMESTAMPDIFF(YEAR, date_of_birth, CURDATE()) AS age;
您的2014-12-31
和2015-01-01
代碼將返回1年,但實際上它具有0.1
使用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))
)
考慮的情況下出生日期是在十二月份,並且您在一月份運行查詢,您需要這樣的事情。
select int(
datediff(day, current_date, birth_date)/365.25
) as yearsOld
確切的語法取決於尚未指定的數據庫引擎。
您正在使用哪些DBMS? –