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 2016 (13.x) ve sonraki sürümleri
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
SQL analiz uç noktası Microsoft Fabric'teki Microsoft Fabric
SQL veritabanında Microsoft Fabric'te
Transact-SQL (T-SQL) ifadesi, AT TIME ZONEbir input_date'yi hedef saat dilindeki ilgili datetimeoffset değerine dönüştürür.
input_date ofset bilgisi olmadan sağlandığında, fonksiyon saat diliminin ofsetini uygular, input_date hedef saat diliminde olduğunu varsayır.
Eğer input_datedatetimeoffset değeri olarak sağlanırsa, AT TIME ZONE madde onu saat dilimi dönüşüm kuralları kullanılarak hedef zaman dilimine dönüştürür.
Uygulama, AT TIME ZONEtarih/saat değerlerini zaman dilimleri arasında dönüştürmek için Windows mekanizmasına dayanır.
Transact-SQL söz dizimi kuralları
Syntax
input_date AT TIME ZONE time_zone_value
input_date AT TIME ZONE { 'time_zone_value' | 'LOCAL' }
Arguments
input_date
Smalldatetime, datetime, datetime2 veya datetimeoffset değerine çözümlenebilen ifade.
'time_zone_value'
Hedef saat diliminin adı. time_zone_valuenvarchar(128)'dir.
SQL Server, Windows Kayıt Defteri'nde depolanan saat dilimlerini kullanır. Bilgisayarda yüklü olan saat dilimleri aşağıdaki kayıt defteri kovanında depolanır: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones.
Kurulu saat dilimlerinin listesi de sys.time_zone_info sistem görünümü üzerinden görünür.
Linux üzerinde SQL Server saat dilimleri hakkında daha fazla bilgi için bkz. Linux'ta SQL Server 2022 ve sonraki sürümleri için saat dilimini yapılandırma.
{ 'time_zone_value' | 'YEREL' }
Hedef saat diliminin adı.
time_zone_valuenvarchar(128)'dir ve varsayılan olarak ' LOCALdir.
Kurulu saat dilimlerinin listesi sys.time_zone_info sistem görünümü üzerinden görünür.
Belirtilmişse LOCAL , mevcut oturum varsayılan zaman dilimi değeri oturumun orijinal zaman bölgesi değerine ayarlanır; bu da veritabanı kapsamlı seçenek veya örnek varsayılan olabilir.
Dönüş türleri
datetimeoffset veri türünü döndürür.
Dönüş değeri
Hedef saat dilimindeki datetimeoffset değeri.
Remarks
AT TIME ZONE bir DST değişikliğinden etkilenen bir aralığa giren smalldatetime, datetime ve datetime2 veri türlerindeki giriş değerlerini dönüştürmek için belirli kurallar uygular:
Saat önceden ayarlandığında, yerel saatte saat ayarlama süresine eşit bir boşluk olur. Bu süre genellikle 1 saattir, ancak saat dilimine bağlı olarak 30 veya 45 dakika olabilir. Bu boşluktaki zaman noktaları, DST değişikliğinden sonra uzaklık ile dönüştürülür.
/* Moving to DST in "Central European Standard Time" zone: offset changes from +01:00 -> +02:00 Change occurred on March 27th, 2022 at 02:00:00. Adjusted local time became 2022-03-27 03:00:00. */ --Time before DST change has standard time offset (+01:00) SELECT CONVERT (DATETIME2 (0), '2022-03-27T01:01:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-03-27 01:01:00 +01:00 /* Adjusted time from the "gap interval" (between 02:00 and 03:00) is moved 1 hour ahead and presented with the summer time offset (after the DST change) */ SELECT CONVERT (DATETIME2 (0), '2022-03-27T02:01:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-03-27 03:01:00 +02:00 --Time after 03:00 is presented with the summer time offset (+02:00) SELECT CONVERT (DATETIME2 (0), '2022-03-27T03:01:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-03-27 03:01:00 +02:00Saat geri ayarlandığında, 2 saatlik yerel saat bir saatle çakışıyor. Bu durumda, çakışan zaman aralığına ait olan zaman noktaları, saat değişmeden önce uzaklık ile birlikte sunulur:
/* Moving back from DST to standard time in "Central European Standard Time" zone: offset changes from +02:00 -> +01:00. Change occurred on October 30th, 2022 at 03:00:00. Adjusted local time became 2022-10-30 02:00:00 */ --Time before the change has DST offset (+02:00) SELECT CONVERT (DATETIME2 (0), '2022-10-30T01:01:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-10-30 01:01:00 +02:00 /* Time from the "overlapped interval" is presented with DST offset (before the change) */ SELECT CONVERT (DATETIME2 (0), '2022-10-30T02:00:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-10-30 02:00:00 +02:00 --Time after 03:00 is regularly presented with the standard time offset (+01:00) SELECT CONVERT (DATETIME2 (0), '2022-10-30T03:01:00', 126) AT TIME ZONE 'Central European Standard Time'; --Result: 2022-10-30 03:01:00 +01:00
Bazı bilgiler (saat dilimi kuralları gibi) SQL Server dışında tutuldığından ve zaman zaman değişikliğe tabi olduğundan, AT TIME ZONE işlev belirsiz olarak sınıflandırılır.
Microsoft Fabric'te veri ambarında datetimeoffset desteklenmese de, AT TIME ZONE aşağıdaki örnekte olduğu gibi datetime2 ile kullanılabilir.
Examples
A. Uzaklık bilgisi olmadan tarih saatine hedef saat dilimi uzaklığı ekleme
Özgün AT TIME ZONE değerlerinin aynı saat diliminde sağlandığını bildiğinizde saat dilimi kurallarına göre uzaklık eklemek için kullanın:
USE AdventureWorks2025;
GO
SELECT SalesOrderID,
OrderDate,
OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST
FROM Sales.SalesOrderHeader;
Sonuç kümesi aşağıdadır.
SalesOrderID OrderDate OrderDate_TimeZonePST
------------ ----------------------- -------------------------------
43659 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00
43660 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00
43661 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00
43662 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00
43663 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00
43664 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00
...
B. Değerleri farklı saat dilimleri arasında dönüştürme
Aşağıdaki örnek, değerleri farklı saat dilimleri arasında dönüştürür.
OrderDate Değerler datetime değeridir ve uzaklık ile depolanmaz, ancak Pasifik Standart Saati olarak bilinir. İlk adım, bilinen uzaklığı atamak ve ardından yeni saat dilimine dönüştürmektir:
USE AdventureWorks2025;
GO
SELECT SalesOrderID,
OrderDate,
--Assign the known offset only
OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST,
--Assign the known offset, then convert to another time zone
OrderDate AT TIME ZONE 'Pacific Standard Time' AT TIME ZONE 'Central European Standard Time' AS OrderDate_TimeZoneCET
FROM Sales.SalesOrderHeader;
Sonuç kümesi aşağıdadır.
SalesOrderID OrderDate OrderDate_TimeZonePST OrderDate_TimeZoneCET
------------ ----------------------- ------------------------------ -------------------------------
43659 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
43660 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
43661 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
43662 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
43663 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
43664 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
...
Saat dilimini içeren bir yerel değişkenle de değiştirebilirsiniz:
USE AdventureWorks2025;
GO
DECLARE @CustomerTimeZone AS NVARCHAR (128) = 'Central European Standard Time';
SELECT SalesOrderID,
OrderDate,
--Assign the known offset only
OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST,
--Assign the known offset, then convert to another time zone
OrderDate AT TIME ZONE 'Pacific Standard Time' AT TIME ZONE @CustomerTimeZone AS OrderDate_TimeZoneCustomer
FROM Sales.SalesOrderHeader;
Sonuç kümesi aşağıdadır.
SalesOrderID OrderDate OrderDate_TimeZonePST OrderDate_TimeZoneCustomer
------------ ----------------------- ------------------------------ -------------------------------
43659 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
43660 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
43661 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
43662 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
43663 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
43664 2022-05-30 00:00:00.000 2022-05-30 00:00:00.000 -07:00 2022-05-30 09:00:00.000 +02:00
...
C. Belirli bir saat dilimini kullanarak zamansal tabloları sorgulama
Aşağıdaki örnek, Pasifik Standart Zamanı kullanılarak zaman tablosundan WideWorldImporters veri seçmektedir.
USE WideWorldImporters;
GO
DECLARE @ASOF AS DATETIMEOFFSET;
SET @ASOF = DATEADD(MONTH, -1, GETDATE()) AT TIME ZONE 'UTC';
-- Query state of the table a month ago projecting period
-- columns as Pacific Standard Time
SELECT CustomerID,
CustomerName,
ValidFrom AT TIME ZONE 'Pacific Standard Time'
FROM Sales.Customers FOR SYSTEM_TIME AS OF @ASOF;
Sonuç kümesi aşağıdadır.
CustomerID CustomerName ValidFrom
---------- ----------------------------------- ----------------------------------
1 Tailspin Toys (Head Office) 2013-01-01 00:00:00.0000000 -08:00
2 Tailspin Toys (Sylvanite, MT) 2013-01-01 00:00:00.0000000 -08:00
3 Tailspin Toys (Peeples Valley, AZ) 2013-01-01 00:00:00.0000000 -08:00
4 Tailspin Toys (Medicine Lodge, KS) 2013-01-01 00:00:00.0000000 -08:00
5 Tailspin Toys (Gasport, NY) 2013-01-01 00:00:00.0000000 -08:00
6 Tailspin Toys (Jessie, ND) 2013-01-01 00:00:00.0000000 -08:00