Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümler
Azure SQL Database
Azure SQL Managed Instance
SQL database in Microsoft Fabric
Bu işlev, belirtilen başlangıç tarihi ile bitiş tarihi arasında kesişen belirtilen tarih bölümü sınırlarının sayısını (işaretli büyük bir tamsayı değeri olarak) döndürür.
Tüm Transact-SQL tarih ve saat veri türlerine ve işlevlerine genel bakış için bkz. Tarih ve Saat Veri Türleri ve İşlevleri (Transact-SQL).
Transact-SQL söz dizimi kuralları
Sözdizimi
DATEDIFF_BIG ( datepart , startdate , enddate )
Arguments
datepart
Geçilen sınırın türünü belirten başlangıç tarihi ve bitiş tarihi bölümü.
Uyarı
DATEDIFF_BIG kullanıcı tanımlı değişkenlerden veya tırnak içine alınmış dizeler olarak tarih bölümü değerlerini kabul etmeyecektir.
Bu tabloda tüm geçerli tarih bölümü bağımsız değişken adları ve kısaltmaları listelenir.
| tarih bölümü adı | datepart kısaltması |
|---|---|
| yıl | yyy, yyyy |
| çeyrek | qq, q |
| ay | Mm, m |
| dayofyear | Dy, y |
| gün | dd, d |
| hafta | wk, ww |
| saat | hh |
| dakika | mi, n |
| saniye | ss, s |
| milisaniye | Ms |
| Microsecond | Mcs |
| Içerir | Ns |
Uyarı
Bu tarih bölümü adı için her belirli tarih bölümü adı ve kısaltmaları aynı değeri döndürür.
başlangıç tarihi
Aşağıdaki değerlerden birine çözümlenebilen bir ifade:
- date
- datetime
- datetimeoffset
- datetime2
- smalldatetime
- time
TarihDATEDIFF_BIG için bir sütun ifadesi, ifade, dize değişmez değeri veya kullanıcı tanımlı değişken kabul eder. Dize değişmez değeri bir tarih saat olarak çözümlenmelidir. Belirsizlik sorunlarını önlemek için dört basamaklı yılları kullanın.
DATEDIFF_BIG
başlangıç tarihini sontarihten çıkarır. Belirsizliği önlemek için dört basamaklı yılları kullanın. İki basamaklı yıllar hakkında bilgi için bkz. İki basamaklı yıl kesme Sunucusu Yapılandırma Seçeneğini yapılandırma .
bitiş tarihi
Bkz. başlangıç tarihi.
Dönüş Türü
İmzalı bigint
Dönüş Değeri
Datepart tarafından ayarlanan sınırda ifade edilen başlangıç tarihi ile bitiş tarihi arasındaki bigint farkını döndürür.
bigint için aralık dışında bir dönüş değeri için (-9,223.372.036.854.775.808 ile 9.223.372.036.854.775.807) DATEDIFF_BIG arasında bir hata döndürür. Int döndüren ve bu nedenle bir dakika veya daha yüksek bir taşma olabilen değerinden farklı olarak, yalnızca DATEDIFF_BIG ve başlangıç tarihi arasındaki farkın 292 yıldan fazla, 3 ay, 10 gün, 23 saat, 47 dakika ve 16,8547758 saniye olduğu nanosaniyelik duyarlık kullanıldığında taşabilir.
Başlangıç tarihi ve bitiş tarihi yalnızca bir saat değeri atanmışsa ve datepart bir saat datepart değilse, DATEDIFF_BIG 0 döndürür.
DATEDIFF_BIG dönüş değerini hesaplamak için başlangıç veyabitiştarihi saat dilimi uzaklığı bileşenini kullanır.
Başlangıç tarihi veya bitiş tarihi için kullanılan smalldatetime değeri için,DATEDIFF_BIGsmalldatetime yalnızca dakika doğruluğuna sahip olduğundan, döndürülen değerde her zaman saniye ve milisaniye değerlerini 0 olarak ayarlar.
Bir tarih veri türü değişkenine yalnızca bir saat değeri atanmışsa, DATEDIFF_BIG eksik tarih bölümünün değerini varsayılan değere ayarlar: 1900-01-01. Saat veya tarih veri türündeki bir değişkene yalnızca bir tarih değeri atanmışsa, DATEDIFF_BIG eksik saat bölümünün değerini varsayılan değere ayarlar: 00:00:00.
Başlangıç tarihi veya bitiş tarihi yalnızca bir saat bölümüne, diğerinde ise yalnızca tarih bölümüne sahipse, DATEDIFF_BIG eksik saat ve tarih bölümlerini varsayılan değerlere ayarlar.
Başlangıç tarihi ve bitiş tarihi farklı tarih veri türlerine sahipse ve birinin diğerinden daha fazla zaman parçası veya kesirli saniye duyarlığı varsa, DATEDIFF_BIG diğerinin eksik bölümlerini 0 olarak ayarlar.
datepart sınırları
Aşağıdaki deyimler aynı başlangıç tarihi ve aynı bitiş tarihi değerlerine sahiptir. Bu tarihler bitişiktir ve zamana göre yüz nanosaniye (.0000001 saniye) farklılık gösterir. Her deyimdeki başlangıç tarihi ile bitiş tarihi arasındaki fark, datepart'ın bir takvim veya saat sınırını geçer. Her deyim 1 döndürür.
Başlangıç tarihi ve bitiş tarihi farklı yıl değerlerine sahipse ancak aynı takvim haftası değerlerine sahipse, DATEDIFF_BIGtarih bölümühaftası için 0 döndürür.
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');
Açıklamalar
, , DATEDIFF_BIGSELECT <list>ve WHEREHAVING yan tümcelerinde kullanınGROUP BY.ORDER BY
DATEDIFF_BIG Dize değişmez değerlerini örtük olarak datetime2 türü olarak dönüştürür. Bu, DATEDIFF_BIG tarih dize olarak geçirildiğinde YDM biçimini desteklemediği anlamına gelir. YDM biçimini kullanmak için dizeyi açıkça bir datetime veya smalldatetime türüne atamanız gerekir.
Belirtmenin SET DATEFIRST üzerinde DATEDIFF_BIGhiçbir etkisi yoktur.
DATEDIFF_BIG işlevin belirleyici bir şekilde çalıştığından emin olmak için her zaman haftanın ilk günü olarak Pazar'ı kullanır.
DATEDIFF_BIG
sontarih ve başlangıç tarihi arasındaki fark bigint aralığının dışında bir değer döndürürse nanosaniyeyle taşabilir.
Örnekler
Başlangıç tarihi ve bitiş tarihi için sütunları belirtme
Bu örnekte , startdate ve enddate parametreleri için bağımsız değişken olarak farklı ifade türleri kullanılır. Bir tablonun iki sütunundaki tarihler arasında kesişen gün sınırlarının sayısını hesaplar.
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
Tarih parça dizeleri olarak başlangıç tarihi ile bitiş tarihi arasındaki farkı bulma
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
Sonuç kümesi aşağıdadır.
2017 years, 11 months, 11 days, 7 hours, 8 minutes and 1.123 seconds
DATEDIFF (Transact-SQL) ile ilgili daha yakından ilgili örneklere bakın.