在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)
谢谢你,我真的挣扎了40分钟找出是什么问题了。 –