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
Bir giriş tarihini hedef saat dilimindeki karşılık gelen datetimeoffset değerine dönüştürür.
Uzaklık bilgileri olmadan giriştarihi sağlandığında işlev, giriştarihinin hedef saat diliminde olduğunu varsayarak saat diliminin uzaklığını uygular.
Inputdate bir datetimeoffset değeri olarak sağlanırsa, AT TIME ZONE yan tümcesi bunu saat dilimi dönüştürme kurallarını kullanarak hedef saat dilimine dönüştürür.
AT TIME ZONE uygulaması, tarih saat değerlerini saat dilimleri arasında dönüştürmek için bir Windows mekanizmasına dayanır.
Transact-SQL söz dizimi kuralları
Syntax
inputdate AT TIME ZONE timezone
Arguments
inputdate
Smalldatetime, datetime, datetime2 veya datetimeoffset değerine çözümlenebilen ifade.
timezone
Hedef saat diliminin adı. 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: KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones. Yüklü saat dilimlerinin listesi de sys.time_zone_info görünümü aracılığıyla sunulur.
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.
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 AdventureWorks2022;
GO
SELECT SalesOrderID, OrderDate,
OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST
FROM Sales.SalesOrderHeader;
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 AdventureWorks2022;
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;
Saat dilimini içeren bir yerel değişkenle de değiştirebilirsiniz:
USE AdventureWorks2022;
GO
DECLARE @CustomerTimeZone 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;
C. Belirli bir saat dilimini kullanarak zamansal tabloları sorgulama
Aşağıdaki örnek, Pasifik Standart Saati'ni kullanarak zamansal bir tablodan verileri seçer.
USE AdventureWorks2022;
GO
DECLARE @ASOF 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 BusinessEntityID,
PersonType,
NameStyle,
Title,
FirstName,
MiddleName,
ValidFrom AT TIME ZONE 'Pacific Standard Time'
FROM Person.Person_Temporal
FOR SYSTEM_TIME AS OF @ASOF;