2017-04-24 11 views
1

私は、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 | 

答えて

1

strftime整数、the integer is always lessと比較したときに文字列を返し、そう。 strftime(...)*1000000のバージョンは、乗算によって整数に変換され、比較が数値で機能するため、機能します。

キャスティングstrftime戻り値はそれが正しい行います

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

ありがとうございました、私は本当に問題だったものを見つける前に40分間苦労しました。 –