如何根据出生年份计算大致年龄?

时间:2018-04-19 20:44:55

标签: sql sqlite date-of-birth

关于根据DOB计算年龄,有几个问题。但是,我有几个表只提供BirthYear。没有月份或日期。我想简单地使用当前年份并从中减去BirthYear中的值来计算近似年龄。只要它在一年左右的时间内,准确性对我来说无关紧要。

我不想以任何方式修改表格。我只是想在运行查询时显示一个计算年龄的附加列。我一直看到ALTER TABLEUPDATE语句的答案,但我认为这不是那种方式......

目前我还要按出生年份订购声明:

ORDER BY CAST(replace(replace(BirthYear,',',''),'$','') AS REAL) ASC

2 个答案:

答案 0 :(得分:2)

在SQLite中,您可以将当前年份视为:

select strftime('%Y', date('now'))

我不知道BirthYear的样子,但你可以这样做:

select (strftime('%Y', date('now')) - BirthYear) as age

或者说出生年份的任何表达。

答案 1 :(得分:1)

您可以使用DATEDIFF函数来实现此结果;而不是ALTER现有表格,可以创建包含计算VIEW列的ApproximateAge

CREATE VIEW vw_MyTableWithAge
AS

SELECT  *
,       DATEDIFF(year, DOB, GETDATE()) AS ApproximateAge
FROM    MyTable

year 是函数的输入,字面上(没有引号)。 DOB 是表格中存储出生日期的列名称。

有关DATEDIFF的更多信息:https://www.w3schools.com/sql/func_sqlserver_datediff.asp

编辑: 我刚看到这是SQLite,请注意MSSQL;这是等效的SQLite代码:

CREATE VIEW vw_MyTableWithAge
AS

SELECT  *
,       strftime('%Y', date('now')) - DOB AS ApproximateAge
FROM    MyTable

strftime语法借鉴了@Gordon Linoff的回答。有关此功能的更多信息:https://www.techonthenet.com/sqlite/functions/strftime.php

创建视图后,您可以使用它来代替您的表格。您仍然可以按计算的年龄订购;现在,该列将被视为表中的任何其他列,但原始表不会以任何方式进行修改:

SELECT *
FROM   vw_MyTableWithAge
ORDER BY ApproximateAge ASC