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.
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