【问题标题】:How to calculate approximate age based on birth year?如何根据出生年份计算大致年龄?
【发布时间】:2018-04-19 20:44:55
【问题描述】:

关于基于 DOB 计算年龄的问题有几个问题。但是,我有几个表只提供了BirthYear。没有月份或日期。我想简单地取当前年份并从中减去BirthYear 中的值来计算大致年龄。只要在一年左右,准确性对我来说并不重要。

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

目前我还有一份按出生年份排序的声明:

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

【问题讨论】:

    标签: sql sqlite date


    【解决方案1】:

    在 SQLite 中,你可以得到当前年份:

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

    我不知道BirthYear 长什么样,但你可以这样做:

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

    或者任何表达出生年份。

    【讨论】:

    • 哇,这完美!无论如何我可以将列命名为“Age”,这样列名就不会占据窗口的一半?
    【解决方案2】:

    你可以使用DATEDIFF函数来实现这个结果;代替ALTERing 现有表,可以创建一个VIEW,其中包括一个计算的ApproximateAgecolumn:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 2023-03-14
      • 2014-04-04
      相关资源
      最近更新 更多