sql >> Database teknologi >  >> RDS >> SQLite

Sådan beregnes forskellen mellem to tidsstempler i SQLite

Problem:

Du har to kolonner af typen timestamp og du vil beregne forskellen mellem dem.

Eksempel:

I travel tabel, er der tre kolonner:id , departure , og arrival . Du vil gerne beregne forskellen mellem arrival og departure .

travel tabellen ser sådan ud:

id afgang 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 (forskel i dage):

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

Resultatet er:

id afgang ankomst forskel
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:

For at beregne forskellen mellem tidsstemplerne i SQLite skal du bruge JULIANDAY() funktion for begge tidsstempler, og træk derefter det ene fra det andet. På denne måde får du forskellen i dage. Heltalsdelen af ​​forskellen er antallet af hele dage, og decimaldelen repræsenterer en delvis dag.

JULIANDAY() funktion returnerer antallet af dage siden kl. Greenwich Mean Time den 24. november 4714 f.v.t. Du kan læse mere om denne funktion i dokumentationen.

Løsning 2 (forskel i sekunder):

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

Resultatet er:

id afgang ankomst forskel
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:

Hvis du gerne vil beregne forskellen mellem tidsstemplerne i sekunder, skal du gange decimalforskellen i dage med antallet af sekunder på en dag, hvilket svarer til 24 * 60 * 60 = 86400 , eller produktet af antallet af timer i en dag, antallet af minutter i en time og antallet af sekunder i et minut. Da decimaldelene for forskel i dage ikke er 100 % nøjagtige på grund af afrundingsfejl, kan du få en ikke-nul decimaldel. Afrunding af resultatet til nærmeste heltal ved hjælp af ROUND() funktion, løser problemet.

På samme måde kan du beregne forskellen i minutter eller timer. Du skal bare ændre * 86400 to * 3600 (minutter) eller * 60 (timer).


  1. Importere fra og eksportere til filer ved hjælp af MySQL-kommandolinjen

  2. PostgreSQL-array af elementer, der hver er en fremmednøgle

  3. En måde at få et indekssøgning efter et førende %jokertegn

  4. Tilslutning af Ignition til Microsoft Access