您好我正在尝试查找unixtimestamp为0的行:
WHERE datetimeField = datetime(0,'unixepoch','localtime') -> does not work
WHERE datetimeField = datetime(0,'unixepoch','utc') -> does not work
WHERE datetimeField = '1970-01-01T01:00:00' -> works
为什么没有日期时间格式有效?
答案 0 :(得分:1)
因为您正在进行字符串比较[sqlite' s" ="不是时间戳意识,它是为了平等而比较两件事情。你的datetimeField可能被存储为String' 1970-01-01T01:00:00',sqlite的日期时间函数可以优雅地处理,但最终仍然是一个字符串,因为sqlite {{3输入
请注意,其中所有这三个都是不同的字符串,因此不会因等式检查而返回true:
sqlite> select datetime(0,'unixepoch','localtime');
1969-12-31 16:00:00
sqlite> select datetime(0,'unixepoch','utc');
1970-01-01 08:00:00
sqlite> select '1970-01-01T01:00:00';
1970-01-01T01:00:00
sqlite>
为了澄清,这个问题的一个简单解决方案是将所有内容转换为您确信可以转换为其他格式,并且易于比较。既然你已经提出来了,我非常喜欢纪元秒。鉴于您在1970年1月1日午夜后一小时的日期:
sqlite> select strftime('%s', '1970-01-01T01:00:00');
3600
sqlite>
所以从您的代码:
{stuff} WHERE 0 = strftime('%s', datetimeField)