DATE_BUCKET (Transact-SQL)
Önemli
Azure SQL Edge 30 Eylül 2025'te kullanımdan kaldırılacaktır. Daha fazla bilgi ve geçiş seçenekleri için Bkz . Kullanımdan kaldırma bildirimi.
Not
Azure SQL Edge artık ARM64 platformunu desteklememektedir.
Bu işlev, parametre tarafından tanımlanan zaman damgasından veya kaynak parametresi belirtilmezse varsayılan kaynak değerinden origin
her tarih saat demetinin 1900-01-01 00:00:00.000
başlangıcına karşılık gelen tarih saat değerini 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özdizimi Kuralları
Söz dizimi
DATE_BUCKET (datePart , number , date , origin)
Bağımsız değişkenler
datePart
Aşağıdaki tabloda gösterildiği gibi tarihin 'number' parametresiyle kullanılan bölümü. DATE_BUCKET
datePart bağımsız değişkenleri için kullanıcı tanımlı değişken eşdeğerlerini kabul etmez.
datePart | Abbreviations |
---|---|
gün | dd, d |
hafta | wk, ww |
ay | mm, m |
çeyrek | qq, q |
yıl | yy, yyyy |
saat | hh |
dakika | mi, n |
saniye | ss, s |
milisaniye | Ms |
sayı
Demetin genişliğine datePart bağımsız değişkeniyle birlikte karar veren tamsayı sayısı. Bu, başlangıç saatinden datePart demetlerinin genişliğini temsil eder. Bu bağımsız değişkenin pozitif bir tamsayı değeri olması gerekir.
tarih
Aşağıdaki değerlerden birine çözümlenebilen bir ifade:
- tarih
- datetime
- datetime2
- datetimeoffset
- smalldatetime
- Saat
Tarih için, DATE_BUCKET
daha önce bahsedilen veri türlerinden herhangi birine çözümlenmesi durumunda bir sütun ifadesi, ifade veya kullanıcı tanımlı değişken kabul eder.
köken
Aşağıdaki değerlerden birine çözümlenebilen isteğe bağlı bir ifade:
- tarih
- datetime
- datetime2
- datetimeoffset
- smalldatetime
- Saat
Kaynak veri türü, tarih parametresinin veri türüyle eşleşmelidir.
DATE_BUCKET
işlevi için kaynak değeri belirtilmemişse 1 Ocak 1900 Pazartesi günü varsayılan başlangıç tarihi değeri 1900-01-01 00:00:00.000
olan 12:00'yi kullanır.
Dönüş türü
Bu yöntemin dönüş değeri veri türü dinamiktir. Dönüş türü, tarih için sağlanan bağımsız değişkene bağlıdır. Tarih için geçerli bir giriş veri türü sağlanırsa, DATE_BUCKET
aynı veri türünü döndürür. DATE_BUCKET
tarih parametresi için bir dize değişmez değeri belirtilirse hata verir.
Dönüş değerleri
Çıkışını anlama DATE_BUCKET
DATE_BUCKET
datePart ve number parametrelerine karşılık gelen en son tarih veya saat değerini döndürür. Örneğin, aşağıdaki ifadelerde çıkış, DATE_BUCKET
varsayılan kaynak saatinden 1900-01-01 00:00:00.000
bir haftalık demetler temelinde hesaplandığından çıkış değerini 2020-04-13 00:00:00.0000000
döndürür. Değeri, başlangıç değerinden 2020-04-13 00:00:00.0000000
1900-01-01 00:00:00.000
6276 haftadır.
DECLARE @date DATETIME2 = '2020-04-15 21:22:11';
SELECT DATE_BUCKET(WEEK, 1, @date);
Aşağıdaki tüm ifadeler için aynı çıkış değeri 2020-04-13 00:00:00.0000000
döndürülür. Bunun nedeni 2020-04-13 00:00:00.0000000
, başlangıç tarihinden itibaren 6276 hafta olması ve 6276'nın 2, 3, 4 ve 6 ile bölünebiliyor olmasıdır.
DECLARE @date DATETIME2 = '2020-04-15 21:22:11';
SELECT DATE_BUCKET(WEEK, 2, @date);
SELECT DATE_BUCKET(WEEK, 3, @date);
SELECT DATE_BUCKET(WEEK, 4, @date);
SELECT DATE_BUCKET(WEEK, 6, @date);
Aşağıdaki ifadenin çıktısı, varsayılan başlangıç zamanından 1900-01-01 00:00:00.000
itibaren 6275 hafta olan şeklindedir2020-04-06 00:00:00.0000000
.
DECLARE @date DATETIME2 = '2020-04-15 21:22:11';
SELECT DATE_BUCKET(WEEK, 5, @date);
Aşağıdaki ifadenin çıktısı, belirtilen çıkış saatinden 2019-01-01 00:00:00
itibaren 75 hafta olan şeklindedir 2020-06-09 00:00:00.0000000
.
DECLARE @date DATETIME2 = '2020-06-15 21:22:11';
DECLARE @origin DATETIME2 = '2019-01-01 00:00:00';
SELECT DATE_BUCKET(WEEK, 5, @date, @origin);
Açıklamalar
Aşağıdaki yan tümcelerde kullanın DATE_BUCKET
:
GROUP BY
HAVING
ORDER BY
SELECT <list>
WHERE
datePart
bağımsız değişkeni
dayofyear, day ve weekday aynı değeri döndürür. Her datePart ve kısaltmaları aynı değeri döndürür.
sayı bağımsız değişkeni
Sayı bağımsız değişkeni pozitif int değerleri aralığını aşamaz. Aşağıdaki deyimlerde, sayı bağımsız değişkeni int aralığını 1 aşıyor. Aşağıdaki deyim aşağıdaki hata iletisini döndürür: Msg 8115, Level 16, State 2, Line 2. Arithmetic overflow error converting expression to data type int.
DECLARE @date DATETIME2 = '2020-04-30 00:00:00';
SELECT DATE_BUCKET(DAY, 2147483648, @date);
sayı için negatif bir değer işleve DATE_BUCKET
geçirilirse aşağıdaki hata döndürülür.
Msg 9834, Level 16, State 1, Line 1
Invalid bucket width value passed to DATE_BUCKET function. Only positive values are allowed.
tarih bağımsız değişkeni
DATE_BUCKET
tarih bağımsız değişkeninin veri türüne karşılık gelen temel değeri döndürür. Aşağıdaki örnekte datetime2 veri türüne sahip bir çıkış değeri döndürülür.
SELECT DATE_BUCKET(DAY, 10, SYSUTCDATETIME());
origin bağımsız değişkeni
içindeki kaynak ve tarih bağımsız değişkenlerinin veri türü aynı olmalıdır. Farklı veri türleri kullanılıyorsa bir hata oluşturulur.
Örnekler
A. Başlangıç zamanından itibaren demet genişliği 1 olan DATE_BUCKET hesaplama
Bu deyimlerin her biri, DATE_BUCKET başlangıç zamanından itibaren demet genişliği 1 olacak şekilde artar:
DECLARE @date DATETIME2 = '2020-04-30 21:21:21';
SELECT 'Week', DATE_BUCKET(WEEK, 1, @date)
UNION ALL SELECT 'Day', DATE_BUCKET(DAY, 1, @date)
UNION ALL SELECT 'Hour', DATE_BUCKET(HOUR, 1, @date)
UNION ALL SELECT 'Minutes', DATE_BUCKET(MINUTE, 1, @date)
UNION ALL SELECT 'Seconds', DATE_BUCKET(SECOND, 1, @date);
Sonuç kümesi aşağıdadır.
Week 2020-04-27 00:00:00.0000000
Day 2020-04-30 00:00:00.0000000
Hour 2020-04-30 21:00:00.0000000
Minutes 2020-04-30 21:21:00.0000000
Seconds 2020-04-30 21:21:21.0000000
B. 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. Bu örnekler Veritabanı kullanılarak AdventureWorksDW2019
oluşturulur.
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 INT = 365,
@datetime DATETIME2 = '2000-01-01 01:01:01.1110000';/* 2000 was a leap year */;
SELECT DATE_BUCKET(DAY, @days, @datetime);
Sonuç kümesi aşağıdadır.
---------------------------
1999-12-08 00:00:00.0000000
(1 row affected)
Sütunu tarih olarak belirtme
Aşağıdaki örnekte, haftalık tarih demetleri üzerinde gruplandırılmış OrderQuantity ve UnitPrice toplamını hesaplıyoruz.
SELECT DATE_BUCKET(WEEK, 1, CAST(Shipdate AS DATETIME2)) AS ShippedDateBucket,
Sum(OrderQuantity) AS SumOrderQuantity,
Sum(UnitPrice) AS SumUnitPrice
FROM dbo.FactInternetSales FIS
WHERE Shipdate BETWEEN '2011-01-03 00:00:00.000'
AND '2011-02-28 00:00:00.000'
GROUP BY DATE_BUCKET(week, 1, CAST(Shipdate AS DATETIME2))
ORDER BY ShippedDateBucket;
Sonuç kümesi aşağıdadır.
ShippedDateBucket SumOrderQuantity SumUnitPrice
--------------------------- ---------------- ---------------------
2011-01-03 00:00:00.0000000 21 65589.7546
2011-01-10 00:00:00.0000000 27 89938.5464
2011-01-17 00:00:00.0000000 31 104404.9064
2011-01-24 00:00:00.0000000 36 118525.6846
2011-01-31 00:00:00.0000000 39 123555.431
2011-02-07 00:00:00.0000000 35 109342.351
2011-02-14 00:00:00.0000000 32 107804.8964
2011-02-21 00:00:00.0000000 37 119456.3428
2011-02-28 00:00:00.0000000 9 28968.6982
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 DATE_BUCKET(WEEK, 10, SYSDATETIME());
Sonuç kümesi aşağıdadır.
---------------------------
2020-03-02 00:00:00.0000000
(1 row affected)
Skaler alt sorgular ve skaler işlevleri sayı ve tarih olarak belirtin
Bu örnekte sayı MAX(OrderDate)
ve tarih bağımsız değişkenleri olarak skaler alt sorgular kullanılır. (SELECT top 1 CustomerKey FROM dbo.DimCustomer where GeographyKey > 100)
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 DATE_BUCKET(WEEK,
(
SELECT TOP 1 CustomerKey
FROM dbo.DimCustomer
WHERE GeographyKey > 100
),
(
SELECT MAX(OrderDate)
FROM dbo.FactInternetSales
)
);
Sayısal ifadeleri ve skaler sistem işlevlerini sayı ve tarih olarak belirtin
Bu örnekte sayı ve tarih bağımsız değişkenleri olarak sayısal ifade (((10/2)) ve skaler sistem işlevleri (SYSDATETIME) kullanılır.
SELECT DATE_BUCKET(WEEK, (10 / 2), SYSDATETIME());
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 DISTINCT DATE_BUCKET(DAY, 30, CAST([shipdate] AS DATETIME2)) AS DateBucket,
FIRST_VALUE([SalesOrderNumber]) OVER (
ORDER BY DATE_BUCKET(DAY, 30, CAST([shipdate] AS DATETIME2))
) AS FIRST_VALUE_In_Bucket,
LAST_VALUE([SalesOrderNumber]) OVER (
ORDER BY DATE_BUCKET(DAY, 30, CAST([shipdate] AS DATETIME2))
) AS LAST_VALUE_In_Bucket
FROM [dbo].[FactInternetSales]
WHERE ShipDate BETWEEN '2011-01-03 00:00:00.000'
AND '2011-02-28 00:00:00.000'
ORDER BY DateBucket;
GO
C. Varsayılan olmayan bir kaynak değeri kullanma
Bu örnek, tarih demetlerini oluşturmak için varsayılan olmayan bir çıkış noktası değeri kullanır.
DECLARE @date DATETIME2 = '2020-06-15 21:22:11';
DECLARE @origin DATETIME2 = '2019-01-01 00:00:00';
SELECT DATE_BUCKET(HOUR, 2, @date, @origin);