Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Fontos
Az Azure SQL Edge 2025. szeptember 30-tól megszűnik. További információkért és a migrálási lehetőségekért tekintse meg a kivonásról szóló közleményt.
Megjegyzés:
Az Azure SQL Edge már nem támogatja az ARM64 platformot.
Ez a függvény az egyes datetime gyűjtők kezdetének megfelelő dátum/idő értéket adja vissza a paraméter által origin meghatározott időbélyegből, vagy ha a forrásparaméter nincs megadva.1900-01-01 00:00:00.000
A Transact-SQL dátum- és időadattípusainak és függvényeinek áttekintését a Dátum és idő adattípusok és függvények (Transact-SQL) című témakörben tekintheti meg.
Transact-SQL Szintaxis konvenciók
Szemantika
DATE_BUCKET (datePart , number , date , origin)
Arguments
datePart
A "szám" paraméterrel használt dátumrész, az alábbi táblázatban látható módon.
DATE_BUCKET nem fogadja el a felhasználó által definiált változóegyenértékeket a datePart argumentumokhoz.
| datePart | Abbreviations |
|---|---|
| nap | dd, d |
| hét | wk, ww |
| hónap | mm, m |
| negyed | qq, q |
| év | yyy, yyyy |
| óra | Hh |
| perc | mi, n |
| második | ss, s |
| Ezredmásodperc | Ms |
szám
A gyűjtő szélességét a datePart argumentummal kombináló egész szám. Ez a dátumpart gyűjtők szélességét jelöli a forrásidőből. Ennek az argumentumnak pozitív egész számnak kell lennie.
date
Az alábbi értékek egyikére feloldható kifejezés:
- date
- datetime
- datetime2
- datetimeoffset
- smalldatetime
- time
Dátumként egy oszlopkifejezéstDATE_BUCKET, kifejezést vagy felhasználó által definiált változót fogad el, ha feloldják a korábban említett adattípusok bármelyikét.
eredet
Nem kötelező kifejezés, amely a következő értékek egyikére oldható fel:
- date
- datetime
- datetime2
- datetimeoffset
- smalldatetime
- time
A forrás adattípusának meg kell egyeznie a dátumparaméter adattípusával.
DATE_BUCKET Az alapértelmezett forrásdátumértéket 1900-01-01 00:00:00.000, azaz 1900. január 1-jén, hétfőn 12:00-t használja, ha nincs megadva forrásérték a függvényhez.
Visszatérési típus
A metódus visszatérési érték adattípusa dinamikus. A visszatérési típus a dátumhoz megadott argumentumtól függ. Ha érvényes bemeneti adattípust ad meg a dátumhoz, DATE_BUCKET ugyanazt az adattípust adja vissza.
DATE_BUCKEThibát jelez, ha a dátumparaméterhez sztringkonstans van megadva.
Visszaadott értékek
A kimenet ismertetése DATE_BUCKET
DATE_BUCKETA datePart és a számparamétereknek megfelelő legújabb dátum- vagy időértéket adja vissza. Az alábbi kifejezésekben például a kimenet értékét DATE_BUCKETadja vissza, 2020-04-13 00:00:00.0000000 mivel a kimenet kiszámítása az alapértelmezett forrásidő egyhetes gyűjtői 1900-01-01 00:00:00.000alapján történik. Az érték 2020-04-13 00:00:00.0000000 a forrásértéktől számítva 1900-01-01 00:00:00.0006276 hét.
DECLARE @date DATETIME2 = '2020-04-15 21:22:11';
SELECT DATE_BUCKET(WEEK, 1, @date);
Az alábbi kifejezéseknél a függvény ugyanazt a kimeneti értéket 2020-04-13 00:00:00.0000000 adja vissza. Ennek az az oka 2020-04-13 00:00:00.0000000 , hogy a származási dátumtól számított 6276 hét, a 6276 pedig 2, 3, 4 és 6 szerint osztható.
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);
Az alábbi 2020-04-06 00:00:00.0000000kifejezés kimenete az alapértelmezett forrásidőtől 1900-01-01 00:00:00.000számítva 6275 hét.
DECLARE @date DATETIME2 = '2020-04-15 21:22:11';
SELECT DATE_BUCKET(WEEK, 5, @date);
Az alábbi kifejezés kimenete a 2020-06-09 00:00:00.0000000 megadott forrásidőtől 2019-01-01 00:00:00számítva 75 hét.
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);
Megjegyzések
Használja DATE_BUCKET a következő záradékokban:
GROUP BYHAVINGORDER BYSELECT <list>WHERE
datePart argumentum
a napfyear, a day és a weekday ugyanazt az értéket adja vissza. Minden datePart és rövidítése ugyanazt az értéket adja vissza.
szám argumentum
A szám argumentum nem haladhatja meg a pozitív int értékek tartományát . Az alábbi utasításokban a szám argumentuma 1-gyel meghaladja a int tartományt. Az alábbi utasítás a következő hibaüzenetet adja vissza: 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);
Ha a függvény a szám negatív értékét adja át DATE_BUCKET , a következő hibaüzenet jelenik meg.
Msg 9834, Level 16, State 1, Line 1
Invalid bucket width value passed to DATE_BUCKET function. Only positive values are allowed.
dátum argumentum
DATE_BUCKETa dátum argumentum adattípusának megfelelő alapértéket adja vissza. Az alábbi példában egy datetime2 adattípusú kimeneti értéket ad vissza a függvény.
SELECT DATE_BUCKET(DAY, 10, SYSUTCDATETIME());
forrás argumentum
A forrás- és dátumargumentumok adattípusának meg kell egyeznie. Ha különböző adattípusokat használ, hiba jön létre.
Példák
A. DATE_BUCKET kiszámítása a forrásidőtől számított 1 gyűjtőszélességgel
Mindegyik utasítás 1 gyűjtőszélességgel DATE_BUCKET a forrásidőtől kezdve:
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);
Itt van az eredmények összessége.
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. Kifejezések használata argumentumként a szám- és dátumparaméterekhez
Ezek a példák különböző típusú kifejezéseket használnak a szám- és dátumparaméterek argumentumaként. Ezek a példák az AdventureWorksDW2019 adatbázis használatával készültek.
Felhasználó által megadott változók megadása számként és dátumként
Ez a példa a felhasználó által definiált változókat adja meg a szám és a dátum argumentumaként:
DECLARE @days INT = 365,
@datetime DATETIME2 = '2000-01-01 01:01:01.1110000';/* 2000 was a leap year */;
SELECT DATE_BUCKET(DAY, @days, @datetime);
Itt van az eredmények összessége.
---------------------------
1999-12-08 00:00:00.0000000
(1 row affected)
Oszlop megadása dátumként
Az alábbi példában az OrderQuantity és a UnitPrice összegét számítjuk ki heti dátumgyűjtők szerint csoportosítva.
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;
Itt van az eredmények összessége.
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
Skaláris rendszerfüggvény megadása dátumként
Ez a példa dátumot SYSDATETIMEad meg. A visszaadott pontos érték az utasítás végrehajtásának napjától és időpontjától függ:
SELECT DATE_BUCKET(WEEK, 10, SYSDATETIME());
Itt van az eredmények összessége.
---------------------------
2020-03-02 00:00:00.0000000
(1 row affected)
Skaláris al lekérdezések és skaláris függvények megadása számként és dátumként
Ez a példa skaláris al lekérdezéseket használ szám és dátum argumentumakéntMAX(OrderDate).
(SELECT top 1 CustomerKey FROM dbo.DimCustomer where GeographyKey > 100)A számparaméter mesterséges argumentumaként szolgál, amely bemutatja, hogyan választhat ki számargumentumot egy értéklistából.
SELECT DATE_BUCKET(WEEK,
(
SELECT TOP 1 CustomerKey
FROM dbo.DimCustomer
WHERE GeographyKey > 100
),
(
SELECT MAX(OrderDate)
FROM dbo.FactInternetSales
)
);
Numerikus kifejezések és skaláris rendszerfüggvények megadása számként és dátumként
Ez a példa numerikus kifejezést ((10/2)) és skaláris rendszerfüggvényeket (SYSDATETIME) használ szám és dátum argumentumaként.
SELECT DATE_BUCKET(WEEK, (10 / 2), SYSDATETIME());
Összesített ablakfüggvény megadása számként
Ez a példa egy összegző ablakfüggvényt használ szám argumentumaként.
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. Nem alapértelmezett forrásérték használata
Ez a példa egy nem alapértelmezett forrásértéket használ a dátumgyűjtők létrehozásához.
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);