sql >> Database >  >> RDS >> SQLite

Hoe het verschil tussen twee tijdstempels in SQLite te berekenen

Probleem:

Je hebt twee kolommen van het type timestamp en u wilt het verschil ertussen berekenen.

Voorbeeld:

In de travel tabel, zijn er drie kolommen:id , departure , en arrival . U wilt het verschil berekenen tussen de arrival en de departure .

De travel tabel ziet er als volgt uit:

id vertrek aankomst
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

Oplossing 1 (verschil in dagen):

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

Het resultaat is:

id vertrek aankomst verschil
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

Discussie:

Om het verschil tussen de tijdstempels in SQLite te berekenen, gebruikt u de JULIANDAY() functie voor beide tijdstempels en trek vervolgens de een van de ander af. Op deze manier krijg je het verschil in dagen. Het gehele deel van het verschil is het aantal volledige dagen en het decimale deel vertegenwoordigt een gedeeltelijke dag.

De JULIANDAY() functie retourneert het aantal dagen sinds het middaguur van Greenwich Mean Time op 24 november 4714 v. Chr. U kunt meer lezen over deze functie in de documentatie.

Oplossing 2 (verschil in seconden):

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

Het resultaat is:

id vertrek aankomst verschil
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

Discussie:

Als u het verschil tussen de tijdstempels in seconden wilt berekenen, vermenigvuldigt u het decimale verschil in dagen met het aantal seconden in een dag, wat gelijk is aan 24 * 60 * 60 = 86400 , of het product van het aantal uren in een dag, het aantal minuten in een uur en het aantal seconden in een minuut. Aangezien de decimale delen voor het verschil in dagen niet 100% nauwkeurig zijn vanwege afrondingsfouten, is het mogelijk dat u een decimaal deel krijgt dat niet nul is. Het resultaat afronden op het dichtstbijzijnde gehele getal, met behulp van de ROUND() functie, lost het probleem op.

Op dezelfde manier zou je het verschil in minuten of in uren kunnen berekenen. Verander gewoon * 86400 to * 3600 (minuten) of * 60 (uur).


  1. Hoe de Security Advisor MySQL-waarschuwing te repareren

  2. verschil tussen ON-clausule en het gebruik van clausule in sql

  3. Meerdere tellingen met verschillende voorwaarden in één MySQL-query

  4. Gegevensmodel voor huwelijksorganisatie