关于根据DOB计算年龄,有几个问题。但是,我有几个表只提供BirthYear
。没有月份或日期。我想简单地使用当前年份并从中减去BirthYear
中的值来计算近似年龄。只要它在一年左右的时间内,准确性对我来说无关紧要。
我不想以任何方式修改表格。我只是想在运行查询时显示一个计算年龄的附加列。我一直看到ALTER TABLE
或UPDATE
语句的答案,但我认为这不是那种方式......
目前我还要按出生年份订购声明:
ORDER BY CAST(replace(replace(BirthYear,',',''),'$','') AS REAL) ASC
答案 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