sql >> Databáze >  >> RDS >> Database

Jak vypočítat rozdíl mezi dvěma daty v T-SQL

Problém:

Máte dva sloupce typu datum a chcete vypočítat rozdíl mezi nimi.

Příklad:

V travel tabulka má tři sloupce:id , departure a arrival . Chcete vypočítat rozdíl mezi arrival a departure nebo počet dní od arrival včetně odjezdu.

travel tabulka vypadá takto:

id odjezd příjezd
1 25. 3. 2018 2018-04-05
2 2019-09-12 23. 9. 2019
3 2018-07-14 2018-07-14
4 2018-01-05 2018-01-08

Řešení:

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

Výsledek je:

id odjezd příjezd rozdíl data dny
1 25. 3. 2018 2018-04-05 11 12
2 2019-09-12 23. 9. 2019 11 12
3 2018-07-14 2018-07-14 0 1
4 2018-01-05 2018-01-08 3 4

Diskuse:

Chcete-li zjistit rozdíl mezi daty, použijte DATEDIFF(datepart, startdate, enddate) funkce. datepart argument definuje část data/datetime, ve které chcete vyjádřit rozdíl. Jeho hodnota může být year , quarter , month , day , minute , atd. V tomto příkladu chcete vyjádřit rozdíl ve dnech, takže prvním argumentem je den. Další dva argumenty jsou datum, od kterého začnete počítat, a datum, kdy přestanete počítat – v tomto případě departure a arrival , respektive.

Ve většině případů skutečně chcete počet dní od prvního do druhého rande včetně . Poté je třeba k rozdílu ve dnech přičíst 1 den:DATEDIFF(day, departure, arrival) + 1 .


  1. Získejte obrázek uložený jako BLOB v databázi MYSQL

  2. zadáním správného uživatelského jména a hesla získáte ORA-01017:neplatné uživatelské jméno/heslo; přihlášení odepřeno

  3. Jaký význam má předpona N v příkazech T-SQL a kdy ji mám použít?

  4. Musíme pro primární klíč zadat not null? Oracle/SQL