SQLite:如何计算出生日期的年龄

kai*_*kai 11 sqlite date

在sqlite3中从出生日期开始计算年龄的最佳方法是什么?

kai*_*kai 13

SELECT (strftime('%Y', 'now') - strftime('%Y', Birth_Date)) - (strftime('%m-%d', 'now') < strftime('%m-%d', Birth_Date));
Run Code Online (Sandbox Code Playgroud)

这个工作.
我只是移植了这个MySQL示例:http://dev.mysql.com/doc/refman/5.0/en/date-calculations.html


Mar*_*tos 12

您可以将日期转换为浮点数并减去...

cast(strftime('%Y.%m%d', 'now') - strftime('%Y.%m%d', dob) as int)
Run Code Online (Sandbox Code Playgroud)

...哪里dob有效的SQLite时间字符串.


ジョー*_*ョージ 6

只是为了澄清kai 的答案(似乎现在编辑非常不受欢迎,并且评论有很强的大小限制和格式问题):

SELECT (strftime('%Y', 'now') - strftime('%Y', Birth_Date)) 
     - (strftime('%m-%d', 'now') < strftime('%m-%d', Birth_Date) );
Run Code Online (Sandbox Code Playgroud)

假设我们想要整年:对于生命的第一个日历年,这将是零。

对于第二个日历年,这将取决于日期——即:

  • 1strftime('%m-%d', 'now') >= strftime('%m-%d', Birth_Date) ["case A "]
  • 0否则 ["case B "] ;

(我假设 sqlite 对两个日期字符串进行字典比较并返回一个整数值。)

对于任何其他日历年,它将是当前第二个之间的年数- 即strftime('%Y', 'now') - strftime('%Y', Birth_Date) - 1,加上与上述相同的年数。

在其它方面,我们减去 1strftime('%Y', 'now') - strftime('%Y', Birth_Date)仅在相反的“箱子”发生-即,当且仅当strftime('%m-%d', 'now') < strftime('%m-%d', Birth_Date),因此公式。


Bru*_*sta 1

我发现这个也许会对你有帮助:

select
    case
        when date(dob, '+' ||
            strftime('%Y', 'now') - strftime('%Y', dob) ||
            ' years') >= date('now')
        then strftime('%Y', 'now') - strftime('%Y', dob)
        else strftime('%Y', 'now') - strftime('%Y', dob) - 1
    end
    as age
from t;
Run Code Online (Sandbox Code Playgroud)

来自http://www.mail-archive.com/sqlite-users@sqlite.org/msg20525.html