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 2022 (16.x)
Azure SQL Database
Azure SQL Managed Instance
SQL analytics endpoint in Microsoft Fabric
Warehouse in Microsoft Fabric
SQL database in Microsoft Fabric
Fonksiyon, DATETRUNC belirli bir tarih parçasına kısaltılmış bir giriş tarihini döndürür.
Uyarı
DATETRUNC SQL Server 2022 (16.x) ile tanıtıldı.
Sözdizimi
DATETRUNC ( datepart , date )
Arguments
datepart
Kesinti hassasiyetini belirtir. Bu tablo, giriş tarih türünün geçerli bir parçası olduğu sürece tüm DATETRUNCgeçerli datepart değerlerini listeler.
| datepart | Abbreviations | Kısaltma notları |
|---|---|---|
year |
yy, yyyy |
|
quarter |
qq, q |
|
month |
mm, m |
|
dayofyear |
dy, y |
dayofyear kısaltılmış gibi day |
day |
dd, d |
day kısaltılmış gibi dayofyear |
week |
wk, ww |
Haftanın ilk gününe kadar kısalt. T-SQL'de haftanın ilk günü T-SQL ayarı ile tanımlanır @@DATEFIRST . ABD İngilizcesi ortamında @@DATEFIRST varsayılan olarak (Pazar) olarak yazılır 7 . |
iso_week |
isowk, isoww |
ISO haftasının ilk gününe kadar kısaltın. ISO8601 takvim sisteminde haftanın ilk günü Pazartesi'dir. |
hour |
hh |
|
minute |
mi, n |
|
second |
ss, s |
|
millisecond |
ms |
|
microsecond |
mcs |
Uyarı
Hafta içi gün, zaman bölgesi ofseti ve nanosaniye T-SQL tarih bölümleri desteklenmiyorDATETRUNC.
date
Herhangi bir geçerli T-SQL tarih veya saat türüne çözümlenebilen herhangi bir ifade, sütun veya kullanıcı tanımlı değişkeni kabul eder. Geçerli türler şunlardır:
- smalldatetime
- datetime
- date
- time
- datetime2
- datetimeoffset
Tarih parametresini tarih veri tipiyle karıştırmayın.
DATETRUNC ayrıca datetime2(7) ile çözümlenebilen herhangi bir dizi dize literalini de kabul eder.
Dönüş türleri
Döndürülen veri tipi dinamiktir DATETRUNC .
DATETRUNC giriş tarihiyle aynı veri türüne (ve varsa, aynı kesirli zaman ölçeğine) sahip kesiklenmiş bir tarih döndürür. Örneğin, DATETRUNC bir datetimeoffset(3) giriş tarihi verildiyse, datetimeoffset(3) döner. Eğer datetime2(7) olarak çözümlenebilen bir dizi verilseydi, DATETRUNCdatetime2(7) dönerdi.
Kesiyel zaman ölçeği hassasiyeti
Milisaniyelerin kesirli zaman ölçeği 3 (.123), mikrosaniyelerin kesirli zaman ölçeği 6 (.123456), nanosaniyelerin kesirli zaman ölçeği ise 9 (.123456789).
Time, datetime2 ve datetimeoffset veri türleri, maksimum kesirli zaman ölçeğine 7 (.1234567). izin verir. Bu nedenle, tarih parçasına kısaltmak millisecond için kesirli zaman ölçeğinin en az 3 olması gerekir. Benzer şekilde, tarih parçasınamicrosecond kısaltmak için kesirli zaman ölçeği en az 6 olmalıdır.
DATETRUNCtarih kısmınınanosecond desteklemiyor çünkü hiçbir T-SQL tarih türü 9 kısmi zaman ölçeğini desteklemiyor.
Örnekler
A. Farklı datepart seçenekleri kullanın
Aşağıdaki örnekler, çeşitli datepart seçeneklerinin kullanımını göstermektedir:
DECLARE @d datetime2 = '2021-12-08 11:30:15.1234567';
SELECT 'Year', DATETRUNC(year, @d);
SELECT 'Quarter', DATETRUNC(quarter, @d);
SELECT 'Month', DATETRUNC(month, @d);
SELECT 'Week', DATETRUNC(week, @d); -- Using the default DATEFIRST setting value of 7 (U.S. English)
SELECT 'Iso_week', DATETRUNC(iso_week, @d);
SELECT 'DayOfYear', DATETRUNC(dayofyear, @d);
SELECT 'Day', DATETRUNC(day, @d);
SELECT 'Hour', DATETRUNC(hour, @d);
SELECT 'Minute', DATETRUNC(minute, @d);
SELECT 'Second', DATETRUNC(second, @d);
SELECT 'Millisecond', DATETRUNC(millisecond, @d);
SELECT 'Microsecond', DATETRUNC(microsecond, @d);
Sonuç kümesi aşağıdadır.
Year 2021-01-01 00:00:00.0000000
Quarter 2021-10-01 00:00:00.0000000
Month 2021-12-01 00:00:00.0000000
Week 2021-12-05 00:00:00.0000000
Iso_week 2021-12-06 00:00:00.0000000
DayOfYear 2021-12-08 00:00:00.0000000
Day 2021-12-08 00:00:00.0000000
Hour 2021-12-08 11:00:00.0000000
Minute 2021-12-08 11:30:00.0000000
Second 2021-12-08 11:30:15.0000000
Millisecond 2021-12-08 11:30:15.1230000
Microsecond 2021-12-08 11:30:15.1234560
B. @@DATEFIRST ortamı
Aşağıdaki örnekler, tarih kısmı ile birlikte @@DATEFIRST ortamın week kullanımını göstermektedir:
DECLARE @d datetime2 = '2021-11-11 11:11:11.1234567';
SELECT 'Week-7', DATETRUNC(week, @d); -- Uses the default DATEFIRST setting value of 7 (U.S. English)
SET DATEFIRST 6;
SELECT 'Week-6', DATETRUNC(week, @d);
SET DATEFIRST 3;
SELECT 'Week-3', DATETRUNC(week, @d);
Sonuç kümesi aşağıdadır.
Week-7 2021-11-07 00:00:00.0000000
Week-6 2021-11-06 00:00:00.0000000
Week-3 2021-11-10 00:00:00.0000000
C. Tarih kelime harfi
Aşağıdaki örnekler, tarih parametre literallerinin kullanımını göstermektedir:
SELECT DATETRUNC(month, '1998-03-04');
SELECT DATETRUNC(millisecond, '1998-03-04 10:10:05.1234567');
DECLARE @d1 char(200) = '1998-03-04';
SELECT DATETRUNC(millisecond, @d1);
DECLARE @d2 nvarchar(max) = '1998-03-04 10:10:05';
SELECT DATETRUNC(minute, @d2);
Sonuç kümesi aşağıdadır. Tüm sonuçlar datetime2(7) tipindedir.
1998-03-01 00:00:00.0000000
1998-03-04 10:10:05.1230000
1998-03-04 00:00:00.0000000
1998-03-04 10:10:00.0000000
D. Değişkenler ve tarih parametresi
Aşağıdaki örnek, tarih parametresinin kullanımını göstermektedir:
DECLARE @d datetime2 = '1998-12-11 02:03:04.1234567';
SELECT DATETRUNC(day, @d);
Sonuç kümesi aşağıdadır.
1998-12-11 00:00:00.0000000
E. Sütunlar ve tarih parametresi
Tablodaki Sales.CustomerTransactions sütunTransactionDate, tarih parametresi için örnek bir sütun argümanı olarak hizmet verir:
USE WideWorldImporters;
GO
SELECT CustomerTransactionID,
DATETRUNC(month, TransactionDate) AS MonthTransactionOccurred,
InvoiceID,
CustomerID,
TransactionAmount,
SUM(TransactionAmount) OVER (
PARTITION BY CustomerID ORDER BY TransactionDate,
CustomerTransactionID ROWS UNBOUNDED PRECEDING
) AS RunningTotal,
TransactionDate AS ActualTransactionDate
FROM [WideWorldImporters].[Sales].[CustomerTransactions]
WHERE InvoiceID IS NOT NULL
AND DATETRUNC(month, TransactionDate) >= '2015-12-01';
F. İfadeler ve tarih parametresi
Date parametresi, T-SQL tarih türüne çözümlenebilen herhangi bir ifadeyi veya datetime2(7) ile çözümlenebilen herhangi bir dize literalini kabul eder. Tablodaki Sales.CustomerTransactions sütun, TransactionDatetarih parametresi için bir ifadenin kullanımını örnekleyen yapay bir argüman olarak hizmet verir:
SELECT DATETRUNC(m, SYSDATETIME());
SELECT DATETRUNC(yyyy, CONVERT(date, '2021-12-1'));
USE WideWorldImporters;
GO
SELECT DATETRUNC(month, DATEADD(month, 4, TransactionDate))
FROM Sales.CustomerTransactions;
GO
G. Bir tarihi , maksimum hassasiyetini temsil eden bir tarih parçasına kısaltın
Eğer datepart, giriş tarih tipiyle aynı bir maksimum hassasiyete sahipse, giriş tarihini bu datepart'a kısaltmak hiçbir etki yaratmaz.
Örnek 1
DECLARE @d datetime = '2015-04-29 05:06:07.123';
SELECT 'Input', @d;
SELECT 'Truncated', DATETRUNC(millisecond, @d);
Sonuç kümesi aşağıdadır. Giriş tarih saati ve kısaltılmış tarih parametresi aynıdır.
Input 2015-04-29 05:06:07.123
Truncated 2015-04-29 05:06:07.123
Örnek 2
DECLARE @d date = '2050-04-04';
SELECT 'Input', @d;
SELECT 'Truncated', DATETRUNC(day, @d);
Sonuç kümesi aşağıdadır. Giriş tarih saati ve kısaltılmış tarih parametresi aynıdır.
Input 2050-04-04
Truncated 2050-04-04
Örnek 3: küçük tarih hassasiyeti
smalldatetime sadece en yakın dakikaya kadar kesindir, saniyeler için bir alanı olsa bile. Bu nedenle, en yakın dakikaya ya da en yakın saniyeye kısaltmak hiçbir etkisi olmazdı.
DECLARE @d smalldatetime = '2009-09-11 12:42:12'
SELECT 'Input', @d;
SELECT 'Truncated to minute', DATETRUNC(minute, @d)
SELECT 'Truncated to second', DATETRUNC(second, @d);
Sonuç kümesi aşağıdadır. Girdi smalldatetime değeri, kesilen her iki değerle aynıdır:
Input 2009-09-11 12:42:00
Truncated to minute 2009-09-11 12:42:00
Truncated to second 2009-09-11 12:42:00
Örnek 4: tarih saati hassasiyeti
Datetime sadece 3.33 milisaniyeye kadar kesindir. Bu nedenle, bir tarih saatini milisaniyeye kısaltmak, kullanıcının beklediğinden farklı sonuçlar verebilir. Ancak, bu kısaltılmış değer, dahili olarak saklanan tarih saati değeriyle aynıdır.
DECLARE @d datetime = '2020-02-02 02:02:02.002';
SELECT 'Input', @d;
SELECT 'Truncated', DATETRUNC(millisecond, @d);
Sonuç kümesi aşağıdadır.
Kısaltılmış tarih, saklanan tarihle aynıdır. Bu, ifadeye DECLARE göre beklediğinizden farklı olabilir.
Input 2020-02-02 02:02:02.003
Truncated 2020-02-02 02:02:02.003
Açıklamalar
Tarih kesintisi, o veri türünün desteklediği minimum tarihten önceki bir tarihe geri gitmeye çalışırsa hata oluşur. Bu hata yalnızca datepart kullanılırken week meydana gelir.
Datepart kullanılırken iso_week bu durum oluşamaz, çünkü tüm T-SQL tarih türleri tesadüfen minimum tarihleri için Pazartesi kullanır. İşte karşılık gelen sonuç hata mesajıyla bir örnek:
DECLARE @d date= '0001-01-01 00:00:00';
SELECT DATETRUNC(week, @d);
Msg 9837, Level 16, State 3, Line 84
An invalid date value was encountered: The date value is less than the minimum date value allowed for the data type.
DATEPART Fonksiyon veya giriş tarihi veri türü kullanılan tarih parçasını desteklemiyorsa DATETRUNC hata atılır. Bu hata şu durumlarda meydana gelebilir:
Desteklenmeyen
DATETRUNCbir datepart kullanılır (yani,weekday,tzoffset, veyananosecond)Zamanla ilgili dateparttarih veri tipiyle veya tarihle ilgili datepartzaman veri tipiyle kullanılır. İşte karşılık gelen sonuç hata mesajıyla bir örnek:
DECLARE @d time = '12:12:12.1234567'; SELECT DATETRUNC(year, @d);Msg 9810, Level 16, State 10, Line 78 The datepart year is not supported by date function datetrunc for data type time.Datepart, veri türünün desteklediğinden daha yüksek kesirli zaman ölçeği hassasiyeti gerektirir. Daha fazla bilgi için bkz. Kesiyel zaman ölçeği hassasiyeti. İşte karşılık gelen sonuç hata mesajıyla bir örnek:
DECLARE @d datetime2(3) = '2021-12-12 12:12:12.12345'; SELECT DATETRUNC(microsecond, @d);Msg 9810, Level 16, State 11, Line 81 The datepart microsecond is not supported by date function datetrunc for data type datetime2.