2017-04-24 2 views
1

Je compare un horodatage unix en microsecondes et un temps avec strftime. Pour ce faire, je dois utiliser une unité commune. Je ne comprends pas pourquoi cela fonctionne en microsecondes (ie en multipliant strftime par 1 million) mais pas l'inverse.comparaison de date avec strftime en sqlite

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 

; 

qui me donne:

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

Répondre

1

strftime retourne une chaîne, donc lorsque l'on compare avec un entier, the integer is always less. La version avec strftime(...)*1000000 fonctionne parce que la multiplication le convertit en nombre entier, permettant à la comparaison de fonctionner sur des nombres.

casting strftime valeur de retour rend droite:

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

Merci, j'ai vraiment eu du mal pour 40min avant de savoir quel était le problème. –