SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Jak obliczyć różnicę między dwoma znacznikami czasu w SQLite

Problem:

Masz dwie kolumny typu timestamp i chcesz obliczyć różnicę między nimi.

Przykład:

W travel tabeli, są trzy kolumny:id , departure i arrival . Chcesz obliczyć różnicę między arrival i departure .

travel tabela wygląda tak:

id wyjazd przybycie
1 2018-03-25 12:00:00 2018-04-05 07:30:00
2 2019-09-12 15:50:00 23-10-2019 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

Rozwiązanie 1 (różnica w dniach):

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

Wynik:

id wyjazd przybycie różnica
1 2018-03-25 12:00:00 2018-04-05 07:30:00 10.8125
2 2019-09-12 15:50:00 23-10-2019 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

Dyskusja:

Aby obliczyć różnicę między znacznikami czasu w SQLite, użyj JULIANDAY() funkcji dla obu znaczników czasu, a następnie odejmij jeden od drugiego. W ten sposób uzyskasz różnicę w dniach. Część całkowita różnicy to liczba pełnych dni, a część dziesiętna to niepełny dzień.

JULIANDAY() funkcja zwraca liczbę dni od południa czasu Greenwich w dniu 24 listopada 4714 r. p.n.e. Możesz przeczytać więcej o tej funkcji w dokumentacji.

Rozwiązanie 2 (różnica w sekundach):

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

Wynik:

id wyjazd przybycie różnica
1 2018-03-25 12:00:00 2018-04-05 07:30:00 934200
2 2019-09-12 15:50:00 23-10-2019 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

Dyskusja:

Jeśli chcesz obliczyć różnicę między znacznikami czasu w sekundach, pomnóż różnicę dziesiętną w dniach przez liczbę sekund w ciągu dnia, co równa się 24 * 60 * 60 = 86400 lub iloczyn liczby godzin w ciągu dnia, liczby minut w godzinie i liczby sekund w minucie. Ponieważ części dziesiętne dla różnicy w dniach nie są w 100% dokładne z powodu błędów zaokrąglania, możesz otrzymać niezerową część dziesiętną. Zaokrąglanie wyniku do najbliższej liczby całkowitej za pomocą ROUND() funkcja, rozwiązuje problem.

Podobnie możesz obliczyć różnicę w minutach lub godzinach. Po prostu zmień * 86400 to * 3600 (minuty) lub * 60 (godziny).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak działa SQLite Min()

  2. Problem z pamięcią SQLite przy podejściu singleton

  3. Kiedy należy zamknąć DatabaseHelper?

  4. Jak pomijać wiersze, które naruszają ograniczenia podczas wstawiania danych do SQLite

  5. Dodaj wygenerowaną kolumnę do tabeli w SQLite