2015-11-09 165 views
3

我想根據當前年份和出生年份來計算用戶的年齡,但是我的語法中的某些內容似乎不正確,我無法發現它。從當前日期和生效計算得出的年齡

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) 
) 

爲什麼這是不正確的?

+1

您正在使用哪些DBMS? –

回答

3

使用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

<類型> [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)) 
    ); 

LiveDemo

編輯:

爲了計算時代更好地利用:

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

您的2014-12-312015-01-01代碼將返回1年,但實際上它具有0.1

+0

這工作正常,但有沒有辦法使用等於而不是as?我記得之前使用過它,但我不記得如何。 – ninesalt

+0

@ Swailem95您使用的是什麼RDBMS? SQL Server?也許是視圖:'CREATE VIEW name AS SELECT age = year(CURRENT_TIMESTAMP) - year(date_of_birth)FROM table' – lad2025

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)) 
) 
0

考慮的情況下出生日期是在十二月份,並且您在一月份運行查詢,您需要這樣的事情。

select int(
datediff(day, current_date, birth_date)/365.25 
) as yearsOld 

確切的語法取決於尚未指定的數據庫引擎。