如何从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
。
所以结果是0
和date(0)
返回null
。
要获得这两个日期的天数差异,您可以使用函数julianday()
:
julianday(NextDate) - julianday(t1.InvDate) AS days
【讨论】:
谢谢福帕斯。我已经尝试了上述方法,但我得到了一个空值。是不是因为 NextDate 是一个计算出来的日期,而且其中一个 NextDate 中有一个 null。 @shabz sqlite 日期和时间函数在给出无法解析的参数时返回 null。确保您的日期字符串采用其中一种受支持的格式:sqlite.org/lang_datefunc.html @shabz 如果您的日期格式正确,YYYY-MM-DD
则 julianday(NextDate) - julianday(t1.InvDate)
将返回正确的结果。检查这个:db-fiddle.com/f/a7RrJzoAJYm1s4ZTG93Mnr/0以上是关于如何从sqlite中的计算列和表中的列计算天数的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 从当前日期计算天数,不包括另一个表中的天数