sql >> Databasteknik >  >> RDS >> SQLite

Hur man beräknar skillnaden mellan två tidsstämplar i SQLite

Problem:

Du har två kolumner av typen timestamp och du vill beräkna skillnaden mellan dem.

Exempel:

I travel tabell, det finns tre kolumner:id , departure och arrival . Du vill beräkna skillnaden mellan arrival och departure .

travel tabellen ser ut så här:

id avgång ankomst
1 2018-03-25 12:00:00 2018-04-05 07:30:00
2 2019-09-12 15:50:00 2019-10-23 10:30:30
3 2018-07-14 16:15:00 2018-07-14 20:40:30
4 2018-01-05 08:35:00 2019-01-08 14:00:00

Lösning 1 (skillnad i dagar):

SELECT
  id,
  departure,
  arrival,
  JULIANDAY(arrival) - JULIANDAY(departure) AS difference
FROM travel;

Resultatet är:

id avgång ankomst skillnad
1 2018-03-25 12:00:00 2018-04-05 07:30:00 10,8125
2 2019-09-12 15:50:00 2019-10-23 10:30:30 40.778125000186265
3 2018-07-14 16:15:00 2018-07-14 20:40:30 0,18437499972060323
4 2018-01-05 08:35:00 2019-01-08 14:00:00 368.2256944444962

Diskussion:

För att beräkna skillnaden mellan tidsstämplarna i SQLite, använd JULIANDAY() funktion för båda tidsstämplarna, subtrahera sedan den ena från den andra. På så sätt får du skillnaden i dagar. Heltalsdelen av skillnaden är antalet hela dagar, och decimaldelen representerar en deldag.

JULIANDAY() funktion returnerar antalet dagar sedan kl. Greenwich Mean Time den 24 november 4714 f.Kr. Du kan läsa mer om denna funktion i dokumentationen.

Lösning 2 (skillnad i sekunder):

SELECT
  id,
  departure,
  arrival,
  ROUND((JULIANDAY(arrival) - JULIANDAY(departure)) * 86400) AS difference
FROM travel;

Resultatet är:

id avgång ankomst skillnad
1 2018-03-25 12:00:00 2018-04-05 07:30:00 934200
2 2019-09-12 15:50:00 2019-10-23 10:30:30 3523230
3 2018-07-14 16:15:00 2018-07-14 20:40:30 15930
4 2018-01-05 08:35:00 2019-01-08 14:00:00 31814700

Diskussion:

Om du vill beräkna skillnaden mellan tidsstämplarna i sekunder, multiplicera decimalskillnaden i dagar med antalet sekunder på en dag, vilket är lika med 24 * 60 * 60 = 86400 , eller produkten av antalet timmar på en dag, antalet minuter i en timme och antalet sekunder i en minut. Eftersom decimaldelarna för skillnaden i dagar inte är 100 % korrekta på grund av avrundningsfel, kan du få en decimaldel som inte är noll. Avrunda resultatet till närmaste heltal med ROUND() funktion, löser problemet.

På samma sätt kan du beräkna skillnaden i minuter eller i timmar. Ändra bara * 86400 to * 3600 (minuter) eller * 60 (timmar).


  1. Tips för att leverera MySQL-databasprestanda - del ett

  2. Flera frågor körs i java i en enda sats

  3. Odefinierad funktion mysql_connect()

  4. Introduktion till temporära tabeller i SQL Server