在sqlite中使用strftime进行日期比较

问题描述:

我正在比较一个以微秒为单位的unix时间戳和一个使用strftime的时间。为此,我需要使用一个通用单元。我不明白它为什么在微秒内工作(即通过将strftime乘以100万)而不是相反。在sqlite中使用strftime进行日期比较

SELECT 

strftime("%s", "2017-04-01 00:00:00") AS Apr1st, 
1492605353892000/1000000 as d, 

strftime("%s", "2017-04-01 00:00:00")*1000000 As Apr1st_us, 
1492605353892000 AS d_us, 

1492605353892000/1000000 > strftime("%s", "2017-04-01 00:00:00") AS cmp, 
1492605353892000/1000000 - strftime("%s", "2017-04-01 00:00:00") AS diff, 

1492605353892000 > strftime("%s", "2017-04-01 00:00:00")*1000000 AS cmp_us, 
1492605353892000 - strftime("%s", "2017-04-01 00:00:00")*1000000 AS diff_us 

; 

这给了我:

|  Apr1st |   d |  Apr1st_us |    d_us | cmp | diff | cmp_us |  diff_us | 
|------------|------------|------------------|------------------|-----|---------|--------|---------------| 
| 1491004800 | 1492605353 | 1491004800000000 | 1492605353892000 | 0 | 1600553 |  1 | 1600553892000 | 

strftime返回一个字符串,这样一个整数,the integer is always less比较时。带有strftime(...)*1000000的版本可以工作,因为乘法将其转换为整数,从而可以在数字上进行比较。

铸造strftime返回值,使得右:

1492605353892000/1000000 > CAST(strftime("%s", "2017-04-01 00:00:00") AS INT) 
+0

谢谢你,我真的挣扎了40分钟找出是什么问题了。 –