Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Vonatkozik a következőkre: SQL Server 2016 (13.x) és későbbi verziók
Azure SQL Database
Azure SQL Managed Instance
SQL database in Microsoft Fabric
Ez a függvény a megadott dátumparti határok számát (aláírt nagy egész számként) adja vissza, a megadott kezdődátum és enddátum között keresztezve.
A Transact-SQL dátum- és időadattípusainak és függvényeinek áttekintését a Dátum és idő adattípusok és függvények (Transact-SQL) című témakörben tekintheti meg.
Transact-SQL szintaxis konvenciók
Szemantika
DATEDIFF_BIG ( datepart , startdate , enddate )
Arguments
datepart
A kezdő és enddátum azon része, amely meghatározza a határátkelések típusát.
Megjegyzés:
DATEDIFF_BIG nem fogadja el a felhasználó által megadott változókból vagy idézett sztringekből származó dátumpart értékeket.
Ez a táblázat felsorolja az összes érvényes datepart argumentumnevet és rövidítést.
| dátum Része név | datepart rövidítés |
|---|---|
| év | yyy, yyyy |
| negyed | qq, q |
| hónap | Mm, m |
| napofév | DY, y |
| nap | dd, d |
| hét | wk, ww |
| óra | Hh |
| perc | mi, n |
| második | ss, s |
| Ezredmásodperc | Ms |
| mikroszekundum | Mcs |
| nanoszekundum | Ns |
Megjegyzés:
Az adott dátumpart-név minden egyes dátumpart-neve és rövidítése ugyanazt az értéket adja vissza.
startdate
Az alábbi értékek egyikére feloldható kifejezés:
- date
- datetime
- datetimeoffset
- datetime2
- smalldatetime
- time
Dátumként egy oszlopkifejezéstDATEDIFF_BIG, kifejezést, sztringkonstanst vagy felhasználó által definiált változót fogad el. A sztringkonstansértékeket dátum/idő értékre kell feloldani. Használjon négyjegyű éveket a kétértelmű problémák elkerülése érdekében.
DATEDIFF_BIG kivonja a kezdődátumot az enddate-ből. A kétértelműség elkerülése érdekében használjon négyjegyű éveket. A kétjegyű évszámmal kapcsolatos információkért tekintse meg a Kétjegyű év leépítési kiszolgáló konfigurációs beállításának konfigurálását .
enddate
Lásd : startdate.
Visszatérési típus
Aláírt bigint
Visszaadott érték
A kezdődátum és az enddátum közötti nagy különbséget adja vissza a datepart által megadott határban kifejezve.
A bigint (-9 223 372 036 854 775 808 és 9 223 372 036 854 775 807 közötti) DATEDIFF_BIG tartományon kívüli visszatérési érték esetén hibát ad vissza. Ellentétben , amely visszaad egy int , és ezért túlcsordulhat egy perc vagy annál magasabb, csak akkor lehet túlcsordulni, DATEDIFF_BIG ha nanoszekundumos pontosságot használ, ahol az enddátum és a startdátum közötti különbség több mint 292 év, 3 hónap, 10 nap, 23 óra, 47 perc és 16,8547758 másodperc.
Ha a kezdő és a végdátum is csak időértékhez van hozzárendelve, és a dátumpart nem idődátum,DATEDIFF_BIG akkor 0 értéket ad vissza.
DATEDIFF_BIG a startdate vagy enddate időzóna-eltolás összetevőjét használja a visszatérési érték kiszámításához.
Az indításhoz vagy az enddátumhoz használt kisdátumérték esetén mindig a másodperceket és az ezredmásodperceket 0 értékre állítja a visszatérési értékben, mert a DATEDIFF_BIG csak a perc pontosságával rendelkezik.
Ha csak egy időérték van hozzárendelve egy dátumadattípus-változóhoz, DATEDIFF_BIG a hiányzó dátumrész értékét az alapértelmezett értékre állítja: 1900-01-01. Ha csak dátumérték van hozzárendelve egy idő- vagy dátum típusú változóhoz, DATEDIFF_BIG a hiányzó időrész értékét az alapértelmezett értékre állítja: 00:00:00. Ha a startdate vagy a enddate csak időrészt tartalmaz, a másik csak dátumrészt, DATEDIFF_BIG a hiányzó idő- és dátumrészeket az alapértelmezett értékekre állítja.
Ha a startdate és a enddate különböző dátumadattípusokkal rendelkezik, és az egyik több időrészt vagy tört másodperc pontosságot tartalmaz, DATEDIFF_BIG a másik hiányzó részeit 0 értékre állítja.
dátumpart-határok
Az alábbi utasítások azonos kezdőértékekkel és enddátumértékekkel rendelkeznek. Ezek a dátumok szomszédosak, és száz nanoszekundumtal (.0000001 másodperccel) térnek el egymástól. Az egyes utasítások kezdődátuma és enddátuma közötti különbség átlépi a dátumrész egy naptár- vagy időhatárát. Minden utasítás 1-et ad vissza. Ha a startdate és a enddate eltérő évértékekkel rendelkezik, de ugyanazokkal a naptári heti értékekkel rendelkeznek, DATEDIFF_BIG akkor a dátumparthét esetén 0 értéket ad vissza.
SELECT DATEDIFF_BIG(year, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF_BIG(quarter, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF_BIG(month, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF_BIG(dayofyear, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF_BIG(day, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF_BIG(week, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF_BIG(hour, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF_BIG(minute, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF_BIG(second, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF_BIG(millisecond, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
Megjegyzések
Használja DATEDIFF_BIG a SELECT <list>, WHERE, HAVINGGROUP BY és ORDER BY záradékokban.
DATEDIFF_BIG implicit módon dátum/idő2 típusként jeleníti meg a sztringkonstansokat. Ez azt jelenti, hogy DATEDIFF_BIG a dátum sztringként való átadásakor nem támogatja az YDM formátumot. Az YDM-formátum használatához explicit módon datetime vagy smalldatetime típusra kell írnia a sztringet.
A beállításnak SET DATEFIRST nincs hatása a parancsra DATEDIFF_BIG.
DATEDIFF_BIG mindig a vasárnapot használja a hét első napjaként annak biztosítására, hogy a függvény determinisztikus módon működjön.
DATEDIFF_BIG
nanoszekundummal túlcsordulhat, ha az enddátum és a startdátum közötti különbség olyan értéket ad vissza, amely a bigint tartományán kívül esik.
Példák
Az indítási és enddátumi oszlopok megadása
Ez a példa különböző típusú kifejezéseket használ a startdate és enddate paraméterek argumentumaként. Egy tábla két oszlopában kiszámítja a dátumok közötti határvonalak számát.
CREATE TABLE dbo.Duration
(startDate datetime2, endDate datetime2);
INSERT INTO dbo.Duration(startDate,endDate)
VALUES('2007-05-06 12:10:09', '2007-05-07 12:10:09');
SELECT DATEDIFF_BIG(day, startDate, endDate) AS 'Duration'
FROM dbo.Duration;
-- Returns: 1
Különbség keresése a kezdő és az enddate dátumrész-sztring között
DECLARE @date1 DATETIME2, @date2 DATETIME2, @result VARCHAR(100)
DECLARE @years BIGINT, @months BIGINT, @days BIGINT, @hours BIGINT, @minutes BIGINT, @seconds BIGINT, @milliseconds BIGINT
SET @date1 = '0001-01-01 00:00:00.00000000'
SET @date2 = '2018-12-12 07:08:01.12345678'
SELECT @years = DATEDIFF(yy, @date1, @date2)
IF DATEADD(yy, -@years, @date2) < @date1
SELECT @years = @years-1
SET @date2 = DATEADD(yy, -@years, @date2)
SELECT @months = DATEDIFF(mm, @date1, @date2)
IF DATEADD(mm, -@months, @date2) < @date1
SELECT @months=@months-1
SET @date2= DATEADD(mm, -@months, @date2)
SELECT @days=DATEDIFF(dd, @date1, @date2)
IF DATEADD(dd, -@days, @date2) < @date1
SELECT @days=@days-1
SET @date2= DATEADD(dd, -@days, @date2)
SELECT @hours=DATEDIFF(hh, @date1, @date2)
IF DATEADD(hh, -@hours, @date2) < @date1
SELECT @hours=@hours-1
SET @date2= DATEADD(hh, -@hours, @date2)
SELECT @minutes=DATEDIFF(mi, @date1, @date2)
IF DATEADD(mi, -@minutes, @date2) < @date1
SELECT @minutes=@minutes-1
SET @date2= DATEADD(mi, -@minutes, @date2)
SELECT @seconds=DATEDIFF(s, @date1, @date2)
IF DATEADD(s, -@seconds, @date2) < @date1
SELECT @seconds=@seconds-1
SET @date2= DATEADD(s, -@seconds, @date2)
SELECT @milliseconds=DATEDIFF(ms, @date1, @date2)
SELECT @result= ISNULL(CAST(NULLIF(@years,0) AS VARCHAR(10)) + ' years,','')
+ ISNULL(' ' + CAST(NULLIF(@months,0) AS VARCHAR(10)) + ' months,','')
+ ISNULL(' ' + CAST(NULLIF(@days,0) AS VARCHAR(10)) + ' days,','')
+ ISNULL(' ' + CAST(NULLIF(@hours,0) AS VARCHAR(10)) + ' hours,','')
+ ISNULL(' ' + CAST(@minutes AS VARCHAR(10)) + ' minutes and','')
+ ISNULL(' ' + CAST(@seconds AS VARCHAR(10))
+ CASE WHEN @milliseconds > 0 THEN '.' + CAST(@milliseconds AS VARCHAR(10))
ELSE '' END
+ ' seconds','')
SELECT @result
Itt van az eredmények összessége.
2017 years, 11 months, 11 days, 7 hours, 8 minutes and 1.123 seconds
További, közelebbről kapcsolódó példák a DATEDIFF (Transact-SQL)-ban.