Muszę obliczyć różnicę w godzinach (typ dziesiętny) między dwiema datami w SQL Server 2008.
Nie mogłem znaleźć żadnej użytecznej techniki konwersji daty i godziny na liczbę dziesiętną za pomocą opcji „CONVERT” w witrynie MSDN.
Czy ktoś może mi w tym pomóc?
AKTUALIZACJA:
Aby było jasne, potrzebuję również części ułamkowej (czyli typu dziesiętnego). Czyli od 9:00 do 10:30 powinno mi zwrócić 1,5.
sql-server
tsql
datetime
decimal
Marc
źródło
źródło
datepart
Przekazane doDATEDIFF
będzie sterować rozdzielczością wyjścia. Na przykład, jeślistart_date
iend_date
różni się o 59 sekund,DATEDIFF(MINUTE, start_date, end_date) / 60.0
zwróci 0, aleDATEDIFF(second, start_date, end_date) / 3600.0
zwróci 0,0163888 (59/3600).DATEDIFF
rozdzielczości wyższej niż godzina) działa. Na przykładSELECT DATEDIFF(second, DATEADD(minute, -15, GETUTCDATE()), GETUTCDATE()) / 3600.0
zwraca 0,250000.Po prostu odejmij dwie wartości daty i godziny i pomnóż przez 24:
Select Cast((@DateTime2 - @DateTime1) as Float) * 24.0
skrypt testowy może wyglądać następująco:
Declare @Dt1 dateTime Set @Dt1 = '12 Jan 2009 11:34:12' Declare @Dt2 dateTime Set @Dt2 = getdate() Select Cast((@Dt2 - @Dt1) as Float) * 24.0
Działa to, ponieważ wszystkie daty są przechowywane wewnętrznie jako para liczb całkowitych, pierwsza liczba całkowita to liczba dni od 1 stycznia 1900 r., A druga liczba całkowita (reprezentująca czas) to liczba ( 1 ) taktów od północy. (W przypadku SmallDatetimes liczba całkowita części czasu to liczba minut od północy). Wszelkie działania arytmetyczne na wartościach wykorzystują czas jako ułamek dnia. 6 rano = 0,25, południe = 0,5, itd ... Zobacz łącze MSDN tutaj, aby uzyskać więcej informacji.
Więc Cast ((@ Dt2 - @ Dt1) as Float) daje całkowitą liczbę dni między dwoma datami. Pomnóż przez 24, aby zamienić na godziny. Jeśli potrzebujesz całkowitej liczby minut, Wiele minut dziennie (24 * 60 = 1440) zamiast 24 ...
UWAGA 1 : To nie to samo, co znacznik dotNet lub javaScript - ten czas tikowania wynosi około 3,33 milisekundy.
źródło
DATEDIFF, ale zwróć uwagę, że zwraca liczbę całkowitą, więc jeśli potrzebujesz ułamków godzin, użyj czegoś takiego: -
źródło
Używając Postgres, miałem problemy z DATEDIFF, ale udało mi się to:
co dało mi wynik typu „14,3”
źródło
Declare @date1 datetime Declare @date2 datetime Set @date1 = '11/20/2009 11:00:00 AM' Set @date2 = '11/20/2009 12:00:00 PM' Select Cast(DateDiff(hh, @date1, @date2) as decimal(3,2)) as HoursApart
Wynik = 1,00
źródło
Prawdopodobnie szukasz funkcji DATEDIFF .
Miejsce, w którym kod może wyglądać następująco:
DATEDIFF (gg; data początkowa; data końcowa)
źródło
Lub użyj tego dla 2 miejsc po przecinku:
źródło
SELECT DATEDIFF (hh, firstDate, secondDate) FROM tableName WHERE ...
źródło