Aracılığıyla paylaş


DATEADD (Transact-SQL)

Belirtilen verir date ile belirtilen number aralığı (imzalı tamsayı) ekleneceği belirtilen datepart Bu date.

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

DATEADD (datepart , number , date )

Bağımsız değişkenler

  • datepart
    Parçası olan date olan bir integernumber eklenir.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

    weekday

    dw, w

    hour

    hh

    minute

    mi, n

    second

    ss, s

    millisecond

    ms

    microsecond

    mcs

    nanosecond

    ns

  • number
    İçin çözümlenebilir bir ifade bir int için eklenen bir datepart , date.Kullanıcı tanımlı değişkenleri geçerlidir.

    Bir ondalık kesir ile bir değer belirtirseniz, kesir kesilmiş ve yuvarlak değil.

  • date
    İçin çözümlenebilir bir ifade bir time, date, smalldatetime, datetime, datetime2, veya datetimeoffset değer.dateifade, sütunifade, kullanıcı tanımlı değişken ya da dize hazır bilgi olabilir. ifade bir dize hazır bilgi ise, çözülmesi gerekir bir datetime.Belirsizlik önlemek için dört basamaklı yıl kullanın.Hakkında bilgi için bkz: iki basamaklı yılları iki basamaklı yıl kesme seçeneği.

Dönüş Türleri

Dönüş veri türü veri türü olan date bağımsız değişkeni, dışında dize hazır bilgi.

Dönüş veri türü dize hazır bilgisi için datetime.dize hazır bilgi saniye ölçek üçten fazla pozisyonları ise bir hata oluşturdu (.NNN) veya saat içeren bölge uzaklık bölümü.

Not

dize hazır bilgileri açıkça için artığını değil, date parametresi sonra tarih gün-ay-yıl (GAY) kullanan locals biçimi almak yanlış sonuçlar dateadd diğer tarihile birlikte kullanıldığında, /saat işlevleri.

Datetime2 türünü döndürme

dateadd işlevi bir datetime2 ne zaman yazın date parametresi bir datetime2 türü.dize hazır bilgileri için kullanırken date parametresi, ardından gerekir açıkça artığını kendilerine bir datetime2 türü dönmek dateadd için bir datetime2 türü.

DatePart bağımsız değişkeni

dayofyear, day, ve weekday dönüş aynı değeri.

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

datepart Olan month ve date ay vardır daha fazla dönen ay günden ve date gün dönüş ayında yok, iade ayın son günü döndürdü.Örneğin, Eylül 30 gün vardır; Bu nedenle, aşağıdaki iki ifadeyi 2006-09-30 00:00:00.000 döndürün:

SELECT DATEADD(month, 1, '2006-08-30')

SELECT DATEADD(month, 1, '2006-08-31')

number Bağımsız değişkeni aralık en çok int.Bağımsız değişkeni için aşağıdaki ifadeleri de number aralık aşıyor int 1.Aşağıdaki hata iletisi döndürülür: ifade için veri türü int'dir dönüştürme aritmetik taşma hatası"

SELECT DATEADD(year,2147483648, '2006-07-31');
SELECT DATEADD(year,-2147483649, '2006-07-31');

date Bağımsız değişkeni edemiyor sınarken bir değer aralık dışında veri türü.Aşağıdaki ifadeler, number eklenen değer date değer aralık aşıyor date veri türü.Aşağıdaki hata iletisi döndürülür: "'DATETIME' için değer ekleme sütun taşmasına neden oldu."

SELECT DATEADD(year,2147483647, '2006-07-31');
SELECT DATEADD(year,-2147483647, '2006-07-31');

Saniye parçası bir smalldatetime değerdir her zaman 00.date Olan smalldatetime, aşağıdaki uygula:

  • datepart Olan second ve number olan +29,-30 arasında hiçbir toplama gerçekleştirilir.

  • datepart Olan second ve number daha az daha-30 veya daha fazla +29, toplama işlemi gerçekleştirildiğinde başlayanbir dakika. at

  • datepart Olan millisecond ve number olan +29998,-30001 arasında hiçbir toplama gerçekleştirilir.

  • datepart Olan millisecond ve number daha az daha-30001 veya daha fazla +29998, toplama işlemi gerçekleştirildiğinde başlayanbir dakika. at

Açıklamalar

dateadd select kullanılabilir <listesi>, gerek Burada, group by ve order by yan tümceleri.

Kesirli saniye duyarlık

Eklenmesi için bir datepart , microsecond veya nanosecond için date veri türleri smalldatetime, date, ve datetime izin yok.

Milisaniye olan 3 ölçeği (. 123).mikrosaniye sahip 6 ölçeği (. 123456).nanosaniye sahip bir ölçek 9 (. 123456789).time, datetime2, Ve datetimeoffset veri türlerine sahip 7'in en büyük ölçek (. 1234567).datepart Olan nanosecond, number Kesirli saniye önce 100 olmalıdır date artış.A number 1-49 arasında yuvarlak yuvarlak kapalı 0 ve bir sayı 50 ile 99 en fazla 100.

Aþaðýdaki ifadeleri ekleyin bir datepart , millisecond, microsecond, veya nanosecond.

DECLARE @datetime2 datetime2 = '2007-01-01 13:10:10.1111111'
SELECT '1 millisecond' ,DATEADD(millisecond,1,@datetime2)
UNION ALL
SELECT '2 milliseconds', DATEADD(millisecond,2,@datetime2)
UNION ALL
SELECT '1 microsecond', DATEADD(microsecond,1,@datetime2)
UNION ALL
SELECT '2 microseconds', DATEADD(microsecond,2,@datetime2)
UNION ALL
SELECT '49 nanoseconds', DATEADD(nanosecond,49,@datetime2)
UNION ALL
SELECT '50 nanoseconds', DATEADD(nanosecond,50,@datetime2)
UNION ALL
SELECT '150 nanoseconds', DATEADD(nanosecond,150,@datetime2);
/*
Returns:
1 millisecond     2007-01-01 13:10:10.1121111
2 milliseconds    2007-01-01 13:10:10.1131111
1 microsecond     2007-01-01 13:10:10.1111121
2 microseconds    2007-01-01 13:10:10.1111131
49 nanoseconds    2007-01-01 13:10:10.1111111
50 nanoseconds    2007-01-01 13:10:10.1111112
150 nanoseconds   2007-01-01 13:10:10.1111113
*/

Saat dilimi uzaklığı

Ayrıca saat verilmiyor bölge uzaklık.

Örnekler

A.1 Aralığı tarafından DatePart artırma

Her biri aşağıdaki deyimleri artışlarla datepart 1 aralığı olarak.

DECLARE @datetime2 datetime2 = '2007-01-01 13:10:10.1111111'
SELECT 'year', DATEADD(year,1,@datetime2)
UNION ALL
SELECT 'quarter',DATEADD(quarter,1,@datetime2)
UNION ALL
SELECT 'month',DATEADD(month,1,@datetime2)
UNION ALL
SELECT 'dayofyear',DATEADD(dayofyear,1,@datetime2)
UNION ALL
SELECT 'day',DATEADD(day,1,@datetime2)
UNION ALL
SELECT 'week',DATEADD(week,1,@datetime2)
UNION ALL
SELECT 'weekday',DATEADD(weekday,1,@datetime2)
UNION ALL
SELECT 'hour',DATEADD(hour,1,@datetime2)
UNION ALL
SELECT 'minute',DATEADD(minute,1,@datetime2)
UNION ALL
SELECT 'second',DATEADD(second,1,@datetime2)
UNION ALL
SELECT 'millisecond',DATEADD(millisecond,1,@datetime2)
UNION ALL
SELECT 'microsecond',DATEADD(microsecond,1,@datetime2)
UNION ALL
SELECT 'nanosecond',DATEADD(nanosecond,1,@datetime2);
/*
Year         2008-01-01 13:10:10.1111111
quarter      2007-04-01 13:10:10.1111111
month        2007-02-01 13:10:10.1111111
dayofyear    2007-01-02 13:10:10.1111111
day          2007-01-02 13:10:10.1111111
week         2007-01-08 13:10:10.1111111
weekday      2007-01-02 13:10:10.1111111
hour         2007-01-01 14:10:10.1111111
minute       2007-01-01 13:11:10.1111111
second       2007-01-01 13:10:11.1111111
millisecond  2007-01-01 13:10:10.1121111
microsecond  2007-01-01 13:10:10.1111121
nanosecond   2007-01-01 13:10:10.1111111
*/

B.Birden fazla düzey bir deyimdatepart artırma

Her biri aşağıdaki deyimleri artışlarla datepart tarafından bir number büyüklükte de sonraki artırmak için daha yüksek datepart , date.

DECLARE @datetime2 datetime2;
SET @datetime2 = '2007-01-01 01:01:01.1111111';
--Statement                                 Result   
------------------------------------------------------------------- 
SELECT DATEADD(quarter,4,@datetime2);     --2008-01-01 01:01:01.110
SELECT DATEADD(month,13,@datetime2);      --2008-02-01 01:01:01.110
SELECT DATEADD(dayofyear,365,@datetime2); --2008-01-01 01:01:01.110
SELECT DATEADD(day,365,@datetime2);       --2008-01-01 01:01:01.110
SELECT DATEADD(week,5,@datetime2);        --2007-02-05 01:01:01.110
SELECT DATEADD(weekday,31,@datetime2);    --2007-02-01 01:01:01.110
SELECT DATEADD(hour,23,@datetime2);       --2007-01-02 00:01:01.110
SELECT DATEADD(minute,59,@datetime2);     --2007-01-01 02:00:01.110
SELECT DATEADD(second,59,@datetime2);     --2007-01-01 01:02:00.110
SELECT DATEADD(millisecond,1,@datetime2); --2007-01-01 01:01:01.110

C.İfadeler numarası ve tarih parametreler için bağımsız değişken olarak kullanma

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

sütun tariholarak belirtme

Aşağıdaki örnek ekler 2 her gün OrderDate Yeni bir hesaplamak için PromisedShipDate.

USE AdventureWorks2008R2;
GO
SELECT SalesOrderID
    ,OrderDate 
    ,DATEADD(day,2,OrderDate) AS PromisedShipDate
FROM Sales.SalesOrderHeader;

Kullanıcı tanımlı değişkenleri numarası ve tarihbelirtme

Aşağıdaki örnek, kullanıcı tanımlı değişkenleri için bağımsız değişken olarak belirtir number ve date.

DECLARE @days int;
DECLARE @datetime datetime;
SET @days = 365;
SET @datetime = '2000-01-01 01:01:01.111'; /* 2000 was a leap year */
SELECT DATEADD(day, @days, @datetime);

skaler sistem işlev tariholarak belirtme

Aşağıdaki örnekte verilmiştir SYSDATETIME için date.

SELECT DATEADD(month, 1, SYSDATETIME());

skaler alt sorgular ve skaler işlevleri numarası ve tarihbelirtme

Aşağıdaki örnek skaler alt sorgular kullanır ve skaler işlevleri, MAX(ModifiedDate), bağımsız olarak number ve date.(SELECT TOP 1 BusinessEntityID FROM Person.Person)yapay bir bağımsız değişken sayı parametresinin nasıl seçileceğini göstermek bir number bağımsız değişken bir değer listesi.

USE AdventureWorks2008R2;
GO
SELECT DATEADD(month,(SELECT TOP 1 BusinessEntityID FROM Person.Person),
    (SELECT MAX(ModifiedDate) FROM Person.Person));

Sabitler numarası ve tarihbelirtme

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

SELECT DATEADD(minute, 1, '2007-05-07 09:53:01.0376635');

Sayısal ifadeleri ve skalersistem işlevleri numarası ve tarihbelirtme

Aşağıdaki örnek, sayısal ifadeleri kullanır (-(10/2)), Tekli işleçler (-), bir aritmetik işleç (/) ve skaler sistem işlevleri (SYSDATETIME) bağımsız değişkenleri olarak number ve date.

SELECT DATEADD(month,-(10/2), SYSDATETIME());

Sayı olarak sıralamasını işlevleri belirtme

Aşağıdaki örnek, bağımsız değişkenleri olarak sıralamasını işlev kullanır number.

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

Bir toplu penceresi işlev sayı olarak belirtme

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

USE AdventureWorks2008R2;
GO
SELECT SalesOrderID, ProductID, OrderQty
    ,DATEADD(day,SUM(OrderQty) 
        OVER(PARTITION BY SalesOrderID),SYSDATETIME()) AS 'Total'
FROM Sales.SalesOrderDetail 
WHERE SalesOrderID IN(43659,43664);
GO

D.dateadd GAY tarih biçimini kullanan yerel ayarlar için kullanma

Aşağıdaki örnekler, dize hazır bilgileri ile dateadd bazı yerel ayarlar için nasıl kullanılır

Bir dize literal örtülü bir cast kullanma gizli tehlikelerini gösteren

Aşağıdaki örnek, bir dize literal açıkça artığını değil ne olacağını gösterir.

SET LANGUAGE Español;

GO

SELECT DATENAME(m, DATEADD(d, 0,'1987-03-07'));

SELECT DATENAME(m, '1987-03-07');

GO

İlk deyim döndüreceği seçin julio (Temmuz) ay ve ikinci için select deyim dönüş marzo (Mart) için ay.

Hatalı sonuçlar açıkça dize vuran tarafından önleme

Aşağıdaki örnek açıkça artığını gösterilmiştir date parametresi hatalı sonuçlarönlemek için.

SET LANGUAGE Español;

GO

SELECT DATENAME(m, DATEADD(d, 0, CAST('1987-03-07' AS datetime2)));

SELECT DATENAME(m, '1987-03-07');

GO

Her ikisi de ifadeleri return seçin marzo (Mart) için ay.

Datetime2 değişken bir dize yerine kullanma

Aşağıdaki örnek, bir dize değişmezi doğrudan kullanımını önler.

SET LANGUAGE Español;

GO

DECLARE @d datetime2 = '1987-03-07';

SELECT DATENAME(m, DATEADD(d, 0, @d));

SELECT DATENAME(m, @d);

GO

Ayrıca bkz.

Başvuru