sql >> Databasteknik >  >> RDS >> Database

Hur man beräknar skillnaden mellan två datum i T-SQL

Problem:

Du har två kolumner av datumtypen 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 , eller antalet dagar från arrival till avgång inklusive.

travel tabellen ser ut så här:

id avgång ankomst
1 2018-03-25 2018-04-05
2 2019-09-12 2019-09-23
3 2018-07-14 2018-07-14
4 2018-01-05 2018-01-08

Lösning:

SELECT
  id,
  departure,
  arrival,
  DATEDIFF(day, departure, arrival) AS date_difference,
  DATEDIFF(day, departure, arrival) + 1 AS days_inclusive
FROM travel;

Resultatet är:

id avgång ankomst date_difference dagar
1 2018-03-25 2018-04-05 11 12
2 2019-09-12 2019-09-23 11 12
3 2018-07-14 2018-07-14 0 1
4 2018-01-05 2018-01-08 3 4

Diskussion:

För att hitta skillnaden mellan datum, använd DATEDIFF(datepart, startdate, enddate) fungera. datepart argument definierar den del av datum/datumtid där du vill uttrycka skillnaden. Dess värde kan vara year , quarter , month , day , minute , etc. I det här exemplet vill du uttrycka skillnaden i dagar, så det första argumentet är dag. De två andra argumenten är datumet från vilket du börjar räkna och datumet när du slutar räkna – i det här fallet departure och arrival , respektive.

I de flesta fall är det du verkligen vill ha antalet dagar från det första datumet till det andra datumet inklusive . Sedan måste du lägga till 1 dag till skillnaden i dagar:DATEDIFF(day, departure, arrival) + 1 .


  1. Hur ställer jag programmatiskt in anslutningssträngen för Entity-Framework Code-First?

  2. Uppgradera PostgreSQL från 9.6 till 10.0 på Ubuntu 16.10

  3. SQLiteException:Tabell finns redan

  4. Om klustrade index i postgres