sqlite数据库中的负日期



我在本地使用sqlliteDB。我从teradata中导入了一些记录,其中有一个格式为"YYYY-MM-DD"的日期字段。当我导入记录时,日期从日期切换到数字。我知道这是sqllite的一个特性,当在where子句中选择它时,可以通过date(sqllite_date)访问它。

我的问题是日期现在看起来有点奇怪。例如,今年似乎是负面的。有什么办法可以恢复到正确的格式吗?下面是将数据库中的数字转换为日期

的示例

SELECT date(18386)
# -4662-03-28
SELECT datetime('now')
# 2021-02-11 10:41:52
SELECT date(sqllite_date) FROM mydb
# Returns -4662-03-28
# Should return 2020-05-04

我是这个领域的新手,所以如果这是一个基本的问题,我很抱歉。非常感谢您的宝贵时间

在SQLite中,您可以将日期存储为TEXT,REALINTEGER.
似乎您将日期存储在具有INTEGERREAL亲和力的列中。
在本例中,如果使用函数date(),它会将18386这样的值视为儒略日,即从公元前4714年11月24日格林威治中午开始的天数。
这就是为什么date(18386)返回公元前4662-03-28的原因。


但是我怀疑您拥有的日期值是自'1970-01-01'以来的天数。
在这种情况下,'1970-01-01'之后的18386天是'2020-05-04'

所以你可以得到YYYY-MM-DD格式的日期,如果你将你的列作为天的值添加到'1970-01-01':

SELECT date('1970-01-01', datecolumn || ' day') FROM tablename 

或者通过将日期值转换为秒并将其视为UNIX时间(自'1970-01-01 00:00:00 UTC'以来的秒数):

SELECT date(datecolumn * 24 * 3600, 'unixepoch') FROM tablename 

datecolumn替换为您的列名。

相关内容

  • 没有找到相关文章

最新更新