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
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analiz Platformu Sistemi (PDW)
Microsoft Fabric'teki SQL analiz uç noktası
Microsoft Fabric'teki ambar
Microsoft Fabric'teki SQL veritabanı
Bu işlev, giriş tarihinintarih bölümüne bir sayı (imzalı tamsayı) ekler ve değiştirilmiş bir tarih/saat değeri döndürür. Örneğin, bugünden itibaren 7.000 dakika olan tarihi bulmak için bu işlevi kullanabilirsiniz: sayı = 7000, datepart = minute, date = today.
Bu fonksiyon, giriş tarihininbir tarihine bir sayı (işaretli bigint) ekler ve değiştirilmiş bir tarih/zaman değeri döndürür. Örneğin, bugünden itibaren 7.000 dakika olan tarihi bulmak için bu işlevi kullanabilirsiniz: sayı = 7000, datepart = minute, date = today.
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 işlevleri.
Transact-SQL söz dizimi kuralları
Syntax
DATEADD ( datepart , number , date )
Arguments
datepart
Tarihin bir DATEADDnumarası eklediği bölüm.
TarihinDATEADD büyük bir sayı ekleyen kısmı.
Bu tabloda tüm geçerli tarih bölümü bağımsız değişkenleri listelenir.
DATEADD
datepart bağımsız değişkenleri için kullanıcı tanımlı değişken eşdeğerlerini kabul etmez.
| datepart | Abbreviations |
|---|---|
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
Tarihin bir tarih parçasına ekleyen DATEADD bir int'e çözümlenebilen ifade.
DATEADD
sayı için kullanıcı tanımlı değişken değerlerini kabul eder.
DATEADD ondalık kesirli belirtilen sayı değerini kesirler. Bu durumda sayı değerini yuvarlamaz.
Tarihe katkı sağlayan bigint'eDATEADD çözümlenebilen bir ifade.
DATEADD
sayı için kullanıcı tanımlı değişken değerlerini kabul eder.
DATEADD ondalık kesirli belirtilen sayı değerini kesirler. Bu durumda sayı değerini yuvarlamaz.
date
Aşağıdaki değerlerden birine çözümlenebilen bir ifade:
- date
- datetime
- datetimeoffset
- datetime2
- smalldatetime
- time
Tarih için bir DATEADD 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. İki basamaklı yıllar hakkında bilgi için bkz . Sunucu yapılandırması: iki basamaklı yıl kesme .
Dönüş türleri
Bu yöntemin dönüş değeri veri türü dinamiktir. Dönüş türü için datesağlanan bağımsız değişkene bağlıdır. değeri date bir dize değişmez değeriyse, DATEADDbir tarih saat değeri döndürür. için dateDATEADD başka bir geçerli giriş veri türü sağlanırsa, aynı veri türünü döndürür.
DATEADD dize değişmez saniye ölçeği üç ondalık basamak konumu (.nnn) aşıyorsa veya dize değişmez değeri saat dilimi uzaklığı bölümünü içeriyorsa hata verir.
Dönüş değeri
datepart bağımsız değişkeni
dayofyear, dayve weekday aynı değeri döndürür.
Her datepart ve kısaltmaları aynı değeri döndürür.
Aşağıdakiler doğruysa:
-
datepart
month - tarih ayı, dönüş ayından daha fazla gün içerir
- dönüş ayında tarih günü yok
Ardından, DATEADD dönüş ayının son gününü döndürür. Örneğin, Eylül ayının 30 (otuz) günü vardır; bu nedenle, bu deyimler döndürür 2024-09-30 00:00:00.000:
SELECT DATEADD(month, 1, '20240830');
SELECT DATEADD(month, 1, '2024-08-31');
sayı bağımsız değişkeni
Sayı bağımsız değişkeni int aralığını aşamaz. Aşağıdaki deyimlerde, sayı bağımsız değişkeni int aralığını 1 aşıyor.
SELECT DATEADD(year, 2147483648, '20240731');
SELECT DATEADD(year, -2147483649, '20240731');
Bu deyimlerin her ikisi de aşağıdaki hata iletisini döndürür:
Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type int.
Sayı argümanı bigint aralığını aşamaz. Aşağıdaki ifadelerde, sayı argümanı bigint aralığını 1 oranında aşar.
DECLARE @datetime2 AS DATETIME2;
SET @datetime2 = '2025-11-01 01:01:01.1111111';
SELECT DATEADD(nanosecond, 9223372036854775808, @datetime2);
SELECT DATEADD(nanosecond, -9223372036854775809, @datetime2);
GO
Bu deyimlerin her ikisi de aşağıdaki hata iletisini döndürür:
Msg 8115, Level 16, State 2, Line 3
Arithmetic overflow error converting expression to data type bigint.
tarih bağımsız değişkeni
DATEADD veri türü aralığının dışındaki bir değere artırılan tarih bağımsız değişkenini kabul etmez. Aşağıdaki deyimlerde, tarih değerine eklenen sayı değeri tarih veri türü aralığını aşıyor.
SELECT DATEADD(year, 2147483647, '20240731');
SELECT DATEADD(year, -2147483647, '20240731');
DATEADD aşağıdaki hata iletisini döndürür:
Msg 517, Level 16, State 1
Line 1 Adding a value to a 'datetime' column caused overflow.
Küçük saat tarihi ve ikinci veya kesirli saniye tarih bölümü için dönüş değerleri
Smalldatetime değerinin saniye bölümü her zaman 00'dır. Smalldatetimetarih değeri için aşağıdakiler geçerlidir:
bir tarih bölümü
secondve -30 ile +29 arasındaki birDATEADDdeğeri için hiçbir değişiklik yapmaz.bir tarih bölümü
secondve -30'dan küçük veya +29'dan büyük bir sayı değeri için,DATEADDtoplama işlemini bir dakikadan başlayarak gerçekleştirir.-30001 ile +29998 arasındaki
millisecondveDATEADDdeğeri için hiçbir değişiklik yapmaz.tarih bölümü
millisecondve -30001'den küçük veya +29998'den büyük bir sayı değeri için toplamaDATEADDişlemini bir dakikadan başlayarak gerçekleştirir.
Remarks
Aşağıdaki yan tümcelerde kullanın DATEADD :
GROUP BYHAVINGORDER BYSELECT <list>WHERE
Kesirli saniye duyarlığı
DATEADD
smalldatetime, microsecond ve nanosecond veri türleri için veya tarih bölümü için eklemeye izin vermez.
Milisaniyelerin ölçeği 3 (.123 ), mikrosaniyelerin ölçeği 6 (.123456) ve nanosaniyelerin ölçeği 9 (.123456789).
time, datetime2 ve datetimeoffset veri türleri en fazla 7 (.1234567 ölçeğine sahiptir).
bir tarih bölümünanosecondiçin, sayı, tarih artışının kesirli saniyelerinden önce 100 olmalıdır. 1 ile 49 arasında bir sayı 0'a yuvarlanır ve 50 ile 99 arasında bir sayı 100'e yuvarlanır.
Bu deyimler , veya millisecondmicrosecondnanosecondekler.
DECLARE @datetime2 AS DATETIME2 = '2024-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);
Sonuç kümesi aşağıdadır.
1 millisecond 2024-01-01 13:10:10.1121111
2 milliseconds 2024-01-01 13:10:10.1131111
1 microsecond 2024-01-01 13:10:10.1111121
2 microseconds 2024-01-01 13:10:10.1111131
49 nanoseconds 2024-01-01 13:10:10.1111111
50 nanoseconds 2024-01-01 13:10:10.1111112
150 nanoseconds 2024-01-01 13:10:10.1111113
Saat dilimi farkı
DATEADD saat dilimi uzaklığı için toplamaya izin vermez.
Examples
A. Datepart değerini 1 aralıkla artırma
Bu deyimlerin her biri datepart değerini 1 aralığı artırır:
DECLARE @datetime2 AS DATETIME2 = '2024-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);
Sonuç kümesi aşağıdadır.
year 2025-01-01 13:10:10.1111111
quarter 2024-04-01 13:10:10.1111111
month 2024-02-01 13:10:10.1111111
dayofyear 2024-01-02 13:10:10.1111111
day 2024-01-02 13:10:10.1111111
week 2024-01-08 13:10:10.1111111
weekday 2024-01-02 13:10:10.1111111
hour 2024-01-01 14:10:10.1111111
minute 2024-01-01 13:11:10.1111111
second 2024-01-01 13:10:11.1111111
millisecond 2024-01-01 13:10:10.1121111
microsecond 2024-01-01 13:10:10.1111121
nanosecond 2024-01-01 13:10:10.1111111
B. Bir deyimde birden fazla datepart düzeyi artırma
Bu deyimlerin her biri datepart değerini, bir sonraki daha yüksek tarih kısmını da artıracak kadar büyük bir sayıartırır:
DECLARE @datetime2 AS DATETIME2;
SET @datetime2 = '2024-01-01 01:01:01.1111111';
--Statement Result
-------------------------------------------------------------------
SELECT DATEADD(quarter, 4, @datetime2); --2025-01-01 01:01:01.1111111
SELECT DATEADD(month, 13, @datetime2); --2025-02-01 01:01:01.1111111
SELECT DATEADD(dayofyear, 366, @datetime2); --2025-01-01 01:01:01.1111111
SELECT DATEADD(day, 366, @datetime2); --2025-01-01 01:01:01.1111111
SELECT DATEADD(week, 5, @datetime2); --2024-02-05 01:01:01.1111111
SELECT DATEADD(weekday, 31, @datetime2); --2024-02-01 01:01:01.1111111
SELECT DATEADD(hour, 23, @datetime2); --2024-01-02 00:01:01.1111111
SELECT DATEADD(minute, 59, @datetime2); --2024-01-01 02:00:01.1111111
SELECT DATEADD(second, 59, @datetime2); --2024-01-01 01:02:00.1111111
SELECT DATEADD(millisecond, 1, @datetime2); --2024-01-01 01:01:01.1121111
C. Sayı ve tarih parametreleri için bağımsız değişken olarak ifadeleri kullanma
Bu örneklerde sayı ve tarih parametreleri için bağımsız değişken olarak farklı ifade türleri kullanılır. Örneklerde AdventureWorks veritabanı kullanılır.
Sütunu tarih olarak belirtme
Bu örnek, adlı 2yeni bir sütun türetmek için sütundaki OrderDate her değere (iki) gün ekler PromisedShipDate :
SELECT SalesOrderID,
OrderDate,
DATEADD(day, 2, OrderDate) AS PromisedShipDate
FROM Sales.SalesOrderHeader;
Kısmi bir sonuç kümesi aşağıdadır:
SalesOrderID OrderDate PromisedShipDate
------------ ----------------------- -----------------------
43659 2005-07-01 00:00:00.000 2005-07-03 00:00:00.000
43660 2005-07-01 00:00:00.000 2005-07-03 00:00:00.000
43661 2005-07-01 00:00:00.000 2005-07-03 00:00:00.000
...
43702 2005-07-02 00:00:00.000 2005-07-04 00:00:00.000
43703 2005-07-02 00:00:00.000 2005-07-04 00:00:00.000
43704 2005-07-02 00:00:00.000 2005-07-04 00:00:00.000
43705 2005-07-02 00:00:00.000 2005-07-04 00:00:00.000
43706 2005-07-03 00:00:00.000 2005-07-05 00:00:00.000
...
43711 2005-07-04 00:00:00.000 2005-07-06 00:00:00.000
43712 2005-07-04 00:00:00.000 2005-07-06 00:00:00.000
...
43740 2005-07-11 00:00:00.000 2005-07-13 00:00:00.000
43741 2005-07-12 00:00:00.000 2005-07-14 00:00:00.000
Kullanıcı tanımlı değişkenleri sayı ve tarih olarak belirtme
Bu örnek, sayı ve tarih için bağımsız değişken olarak kullanıcı tanımlı değişkenleri belirtir:
DECLARE @days AS INT = 365,
@datetime AS DATETIME = '2000-01-01 01:01:01.111' /* 2000 was a leap year */;
SELECT DATEADD(day, @days, @datetime);
Sonuç kümesi aşağıdadır.
2000-12-31 01:01:01.110
Skaler sistem işlevini tarih olarak belirtin
Bu örnekte tarih belirtildi SYSDATETIME. Döndürülen tam değer, deyimin yürütülme gününe ve saatlerine bağlıdır:
SELECT DATEADD(month, 1, SYSDATETIME());
Sonuç kümesi aşağıdadır.
2024-04-25 14:29:59.6727944
Skaler alt sorgular ve skaler işlevleri sayı ve tarih olarak belirtin
Bu örnekte sayı MAX(ModifiedDate) ve tarih bağımsız değişkenleri olarak skaler alt sorgular kullanılır.
(SELECT TOP 1 BusinessEntityID FROM Person.Person)bir sayı bağımsız değişkeninin değer listesinden nasıl seçeceğini göstermek için sayı parametresi için yapay bir bağımsız değişken görevi görür.
SELECT DATEADD(month,
(SELECT TOP 1 BusinessEntityID FROM Person.Person),
(SELECT MAX(ModifiedDate) FROM Person.Person)
);
Sayısal ifadeleri ve skaler sistem işlevlerini sayı ve tarih olarak belirtin
Bu örnekte -(10 / 2)tarih bağımsız değişkenleri olarak sayısal ifade (-), tekli işleçler (/), SYSDATETIME () ve skaler sistem işlevleri () kullanılır.
SELECT DATEADD(month, -(10 / 2), SYSDATETIME());
Derecelendirme işlevlerini sayı olarak belirtme
Bu örnekte sayı için bağımsız değişken olarak bir derecelendirme işlevi kullanılır.
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;
Sayı olarak bir toplama penceresi işlevi belirtme
Bu örnekte sayı için bağımsız değişken olarak bir toplama penceresi işlevi kullanılır.
SELECT SalesOrderID,
ProductID,
OrderQty,
DATEADD(day, SUM(OrderQty) OVER (PARTITION BY SalesOrderID), SYSDATETIME()) AS 'Total'
FROM Sales.SalesOrderDetail
WHERE SalesOrderID IN (43659, 43664);
GO