如何从sqlite中的计算列和表中的列计算天数

Posted

技术标签:

【中文标题】如何从sqlite中的计算列和表中的列计算天数【英文标题】:how do I calculate the days from a calculated column and a column in a table in sqlite 【发布时间】:2019-09-13 17:20:59 【问题描述】:

在 Access 中,我有以下查询,它运行良好。

access sql query access result

在 SQLite 中,我很难计算天数。我试过 julianday、substr 等

SELECT DISTINCT t1.AccNo, t1.InvDate, ifnull((SELECT MIN(t1min.InvDate) 从 t1 到 t1min,其中 t1min.InvDate > t1.InvDate AND t1.AccNo = t1min.AccNo), Date('%Y(t1.InvDate)','%m(t1min.InvDate)') +'1 个月') AS NextDate, 日期(NextDate - t1.InvDate)AS 天 FROM t1 LEFT JOIN customer ON t1.AccNo=customer.AccNo 按 t1.AccNo、t1.InvDate、t1.NextDate 分组 限制 17 块引用

result of sqlite

【问题讨论】:

***.com/editing-help and meta.***.com/questions/333952/… and meta.***.com/a/285557/7733418 【参考方案1】:

在 SQLite 中没有特殊的 Date 数据类型。 日期存储为字符串和表达式:

NextDate - t1.InvDate

在你的情况下被评估为0,因为我猜这两个操作数都以相同的整数部分开头,例如:

'2019-02-01' - '2019-01-01'

在这种情况下,SQLite 隐式地将两者都转换为起始整数部分:2019。 所以结果是0date(0) 返回null。 要获得这两个日期的天数差异,您可以使用函数julianday()

julianday(NextDate) - julianday(t1.InvDate) AS days

【讨论】:

谢谢福帕斯。我已经尝试了上述方法,但我得到了一个空值。是不是因为 NextDate 是一个计算出来的日期,而且其中一个 NextDate 中有一个 null。 @shabz sqlite 日期和时间函数在给出无法解析的参数时返回 null。确保您的日期字符串采用其中一种受支持的格式:sqlite.org/lang_datefunc.html @shabz 如果您的日期格式正确,YYYY-MM-DDjulianday(NextDate) - julianday(t1.InvDate) 将返回正确的结果。检查这个:db-fiddle.com/f/a7RrJzoAJYm1s4ZTG93Mnr/0

以上是关于如何从sqlite中的计算列和表中的列计算天数的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 从当前日期计算天数,不包括另一个表中的天数

从日期范围计算特定月份的天数。谷歌表格

如何在 sqlite 中查询一个 fts 表以查找一个匹配的列和另一个不匹配特定查询的列?

如何通过sql中的计算列计算下一个生日

如何计算表中的条目?

如何重命名 SQLite 数据库表中的列?