【问题标题】:How does one use STRFTIME to calculate the difference between two dates, giving a length of time?如何使用 STRFTIME 计算两个日期之间的差异,给出时间长度?
【发布时间】:2021-02-22 21:50:27
【问题描述】:

我正在使用一个虚构的数据库,我必须在其中计算员工的任期。所以,我想做'now' - hiredate = tenure

我尝试了一些方法,但只返回了 Null

SELECT
    FirstName,
    LastName,
    HireDate,
    strftime('y%-m%-d%', HireDate) - strftime('y%-m%-d%','now') AS Tenure
FROM
    EMPLOYEES
ORDER BY
    Tenure

【问题讨论】:

  • HireDate 的格式是什么?

标签: sqlite strftime


【解决方案1】:

SQLite's date functionsstrftime() 一样,仅适用于格式为 YYYY-MM-DD 的日期。
如果HireDate 列采用这种格式,您可以将HireDate 与当前日期的差异以秒为单位,如下所示:

SELECT FirstName, LastName, HireDate, 
       (strftime('%s', CURRENT_DATE) - strftime('%s', HireDate)) AS Tenure 
FROM EMPLOYEES 
ORDER BY Tenure

因为strftime('%s', some_date) 返回从1970-01-01some_date 所经过的秒数。

或与julianday()相同的天数差异:

SELECT FirstName, LastName, HireDate, 
       (julianday(CURRENT_DATE) - julianday(HireDate)) AS Tenure 
FROM EMPLOYEES 
ORDER BY Tenure 

因为julianday(some_date) 返回自公元前 4714 年 11 月 24 日格林威治中午以来的天数。直到some_date

【讨论】:

    【解决方案2】:

    strftime 从给定的(日期)时间值创建一个字符串(string from 时间)。

    相反,您应该简单地比较儒略日:

    SELECT FirstName, LastName, HireDate, julianday('now') - julianday(HireDate) AS Tenure FROM EMPLOYEES ORDER BY Tenure
    

    【讨论】:

    猜你喜欢
    • 2021-11-25
    • 2011-08-01
    • 1970-01-01
    • 2015-09-15
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多