Aracılığıyla paylaş


DATEDIFF (Transact-SQL)

Sayısı (imzalı tamsayı) belirtilen verir datepart sınırları çapraz arasında belirtilen startdate ve enddate.

Tüm genel bakış için Transact-SQLBkz:tarih ve saat veri türleri ve İşlevler, Tarih ve Saat İşlevleri (Transact-SQL).Bilgi ve tarih ve saat veri türleri ve işlevleri ortaktır örnekler için bkz: Tarih ve saat veri kullanma.

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

DATEDIFF ( datepart , startdate , enddate )

Bağımsız değişkenler

  • datepart
    Parçası olan startdate ve enddate Çapraz sınır türünü belirtir.Aşağıdaki tablo geçerli listeler datepart bağımsız değişkeni.Kullanıcı tanımlı değişken eşdeğerleri geçerli değildir.

    datepart

    Kısaltmalar

    year

    yy, yyyy

    quarter

    qq, q

    month

    mm, m

    dayofyear

    dy, y

    day

    dd, d

    week

    wk, ww

    hour

    hh

    minute

    mi, n

    second

    ss, s

    millisecond

    ms

    microsecond

    mcs

    nanosecond

    ns

  • startdate
    İçin çözümlenebilir bir ifade bir time, date, smalldatetime, datetime, datetime2, veya datetimeoffset değer.datebir ifade, sütun ifade, kullanıcı tanımlı bir değişken veya dize hazır bilgi olabilir.startdatedan çıkarılır enddate.

    Belirsizlik önlemek için dört basamaklı yıl kullanın.İki basamaklı yılları hakkında daha fazla bilgi için bkz: iki basamaklı yıl kesme seçeneği.

  • enddate
    Bkz. startdate.

Dönüş Türü

int

Dönüş Değeri

  • Her datepart ve kendi kısaltmaları aynı değeri.

Dönüş değeri için aralık dışında olup int +2,147,483,647 için (2.147.483.648), bir hata döndürdü.İçin millisecond, arasındaki en büyük fark startdate ve enddate olan 24 gün, 20 saat, 31 dakika ve 23.647 saniye.İçin second, en büyük fark ise 68 yıl.

startdate Ve enddate her ikisi de yalnızca bir saat değeri atanır ve datepart saatdeğil bir datepart, 0 döner.

Bir saat dilimi uzaklığı bileşeni olan startdate veya endate Hesaplama içinde kullanılmazdönüş değeri.

Çünkü smalldatetime dakika için yalnızca doğru olduğunda bir smalldatetime değeri için kullanılan startdate veya enddate, saniye ve milisaniye olarak her zaman küme 0 dönüş değeri.

Yalnızca bir saat değer veri türü tarih değişkenine atanır, eksik tarih bölümünü küme için varsayılan değer değeridir: 1900-01-01.Yalnızca bir saat ya da tarih veri türünde bir değişken için bir tarih değeri atanır, eksik saat bölümünü küme için varsayılan değer değeridir: 00:00:00.Ya da, startdate veya enddate sahip yalnızca saat bölümünü ve diğer yalnızca tarih bölümünü eksik saat ve tarih bölümleri küme için varsayılan değerler.

startdate Ve enddate farklı tarih veri türleri olan ve bir daha fazla saat parçaları veya Kesirli saniye duyarlık diğerinden sahiptir, diğer eksik parçalarını küme için 0.

DatePart sınırları

Aþaðýdaki ifadeleri aynı olduğu startdate ve aynı endate.Bu tarih, bitişik olan ve.0000001 saniye saat farklıdır.Arasındaki fark startdate ve endate her deyim , bir takvim veya saat sınırını geçiyor, datepart.Her deyim 1 döndürür.Bu örnek için kullanılan farklı yıl ve iki startdate ve endate aynı takvim hafta, dönüş değeri olan week 0 olacaktır.

SELECT DATEDIFF(year, '2005-12-31 23:59:59.9999999'

, '2006-01-01 00:00:00.0000000');

SELECT DATEDIFF(quarter, '2005-12-31 23:59:59.9999999'

, '2006-01-01 00:00:00.0000000');

SELECT DATEDIFF(month, '2005-12-31 23:59:59.9999999'

, '2006-01-01 00:00:00.0000000');

SELECT DATEDIFF(dayofyear, '2005-12-31 23:59:59.9999999'

, '2006-01-01 00:00:00.0000000');

SELECT DATEDIFF(day, '2005-12-31 23:59:59.9999999'

, '2006-01-01 00:00:00.0000000');

SELECT DATEDIFF(week, '2005-12-31 23:59:59.9999999'

, '2006-01-01 00:00:00.0000000');

SELECT DATEDIFF(hour, '2005-12-31 23:59:59.9999999'

, '2006-01-01 00:00:00.0000000');

SELECT DATEDIFF(minute, '2005-12-31 23:59:59.9999999'

, '2006-01-01 00:00:00.0000000');

SELECT DATEDIFF(second, '2005-12-31 23:59:59.9999999'

, '2006-01-01 00:00:00.0000000');

SELECT DATEDIFF(millisecond, '2005-12-31 23:59:59.9999999'

, '2006-01-01 00:00:00.0000000');

Açıklamalar

DATEDIFF seçme listesinde kullanılabilir nerede, HAVING, by ve order by yan tümceleri GRUPLANDIRMAK.De SQL Server 2008, DATEDIFF örtülü olarak çevirir ve dize hazır olarak datetime2 türleri.DATEDIFF dateadd ile kullanırken, düz dize kümesinde örtülü yayınları kaçının.Daha fazla bilgi için, bkz. DATEADD (Transact-SQL).

Örnekler

Aşağıdaki örnekler, farklı türde ifadeler bağımsız değişkenleri olarak kullanmak startdate ve enddate parametreleri.

A.Sütunlar başlangıçtarihi ve bitiştarihi için belirtme

Aşağıdaki örnek, bir tabloiki sütundaki tarihleri arasında çapraz gün sınırları 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(day,startDate,endDate) AS 'Duration'
FROM dbo.Duration;
-- Returns: 1

B.Kullanıcı tanımlı değişkenleri başlangıçtarihi ve bitiştarihi için belirtme

Aşağıdaki örnek, kullanıcı tanımlı değişkenleri için bağımsız değişkenler olarak kullanır startdate ve enddate.

DECLARE @startdate datetime2 = '2007-05-05 12:10:09.3312722';
DECLARE @enddate datetime2 = '2007-05-04 12:10:09.3312722'; 
SELECT DATEDIFF(day, @startdate, @enddate);

C.skalersistem işlevleri başlangıçtarihi ve bitiştarihi için belirtme

Aşağıdaki örnek skaler sistem işlevleri bağımsız değişkenleri kullanır startdate ve enddate.

SELECT DATEDIFF(millisecond, GETDATE(), SYSDATETIME());

D.skaler alt sorgular ve skaler işlevleri başlangıçtarihi ve bitiştarihi için belirtme

Aşağıdaki örnek skaler alt sorgular ve skaler işlevleri için bağımsız değişken olarak kullanır startdate ve enddate.

USE AdventureWorks2008R2;
GO
SELECT DATEDIFF(day,(SELECT MIN(OrderDate) FROM Sales.SalesOrderHeader),
    (SELECT MAX(OrderDate) FROM Sales.SalesOrderHeader));

E.Sabitleri başlangıçtarihi ve bitiştarihi için belirtme

Aşağıdaki örnek, karakter sabitler için bağımsız değişken olarak kullanır startdate ve enddate.

SELECT DATEDIFF(day, '2007-05-07 09:53:01.0376635'
    , '2007-05-08 09:53:01.0376635');

F.Sayısal ifadeleri ve bitiştarihi skaler sistem işlevleri belirtme

Aşağıdaki örnek sayısal ifadekullanan (GETDATE ()+ 1)ve skaler sistem işlevleri, GETDATE ve SYSDATETIME, bağımsız olarak enddate.

Not

SYSDATETIME, SYSUTCDATETIME ve SYSDATETIMEOFFSET bir aritmetik ifadeparçası olamaz.

USE AdventureWorks2008R2;
GO
SELECT DATEDIFF(day, '2007-05-07 09:53:01.0376635', GETDATE()+ 1) 
    AS NumberOfDays
FROM Sales.SalesOrderHeader;
GO
USE AdventureWorks2008R2;
GO
SELECT DATEDIFF(day, '2007-05-07 09:53:01.0376635', DATEADD(day,1,SYSDATETIME())) AS NumberOfDays
FROM Sales.SalesOrderHeader;
GO

G.Sıralama işlevleri başlangıçtarihi için belirtme

Aşağıdaki örnek, bir sıralama işlev için bağımsız değişken olarak kullanır startdate.

USE AdventureWorks2008R2;
GO
SELECT p.FirstName, p.LastName
    ,DATEDIFF(day,ROW_NUMBER() OVER (ORDER BY 
        a.PostalCode),SYSDATETIME()) AS 'Row Number'
FROM Sales.SalesPerson s 
    INNER JOIN Person.Person p 
        ON s.BusinessEntityID = p.BusinessEntityID
    INNER JOIN Person.Address a 
        ON a.AddressID = p.BusinessEntityID
WHERE TerritoryID IS NOT NULL 
    AND SalesYTD <> 0;

H.Bir toplu penceresi işlev başlangıçtarihi için belirtme

Aşağıdaki örnek bir toplu penceresi işlev için bir bağımsız değişken olarak kullanır. startdate.

USE AdventureWorks2008R2;
GO
SELECT soh.SalesOrderID, sod.ProductID, sod.OrderQty,soh.OrderDate
    ,DATEDIFF(day,MIN(soh.OrderDate) 
        OVER(PARTITION BY soh.SalesOrderID),SYSDATETIME() ) AS 'Total'
FROM Sales.SalesOrderDetail sod
    INNER JOIN Sales.SalesOrderHeader soh
        ON sod.SalesOrderID = soh.SalesOrderID
WHERE soh.SalesOrderID IN(43659,58918);
GO

Ayrıca bkz.

Başvuru