SQLite
 sql >> база данни >  >> RDS >> SQLite

Как да изчислим разликата между две времеви марки в SQLite

Проблем:

Имате две колони от типа timestamp и искате да изчислите разликата между тях.

Пример:

В travel таблица, има три колони:id , departure и arrival . Искате да изчислите разликата между arrival и departure .

travel таблицата изглежда така:

id отпътуване пристигане
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

Решение 1 (разлика в дни):

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

Резултатът е:

id отпътуване пристигане разлика
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

Дискусия:

За да изчислите разликата между времевите марки в SQLite, използвайте JULIANDAY() функция и за двете времеви марки, след което извадете едното от другото. По този начин получавате разликата в дните. Цялата част от разликата е броят на пълните дни, а десетичната част представлява частичен ден.

JULIANDAY() функцията връща броя на дните след обяд средно време по Гринуич на 24 ноември 4714 г. пр.н.е. Можете да прочетете повече за тази функция в документацията.

Решение 2 (разлика в секунди):

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

Резултатът е:

id отпътуване пристигане разлика
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

Дискусия:

Ако искате да изчислите разликата между клеймите за време в секунди, умножете десетичната разлика в дни по броя на секундите на ден, което е равно на 24 * 60 * 60 = 86400 , или произведението от броя на часовете на ден, броя на минутите в един час и броя на секундите в минута. Тъй като десетичните части за разлика в дните не са 100% точни поради грешки при закръгляването, може да получите ненулева десетична част. Закръгляване на резултата до най-близкото цяло число, като се използва ROUND() функция, отстранява проблема.

По същия начин можете да изчислите разликата в минути или в часове. Просто променете * 86400 to * 3600 (минути) или * 60 (часове).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да създам масив от списък с данни за курсора в Android

  2. 2 начина за връщане само на числовите стойности от колона на базата данни на SQLite

  3. Вмъкване на SQLite

  4. запишете List<Model class> в sqlite

  5. WinDeath при notifyDataSetChanged()