我在本地使用sqllite
DB。我从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
,REAL
或INTEGER
.
似乎您将日期存储在具有INTEGER
或REAL
亲和力的列中。
在本例中,如果使用函数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
替换为您的列名。