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
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analiz Platformu Sistemi (PDW)
Microsoft Fabric'teki SQL analiz uç noktası
Microsoft Fabric'teki ambar
Microsoft Fabric'teki SQL veritabanı
Datetime2 gibi 24 saatlik bir saati temel alarak günün saatiyle birleştirilen tarihi tanımlar ve Eşgüdümlü Evrensel Saat'e (UTC) göre saat dilimi farkındalığı ekler.
datetimeoffset açıklaması
| Property | Value |
|---|---|
| Syntax | DATETIMEOFFSET [ ( kesirli saniye duyarlığı ) ] |
| Usage | DECLARE @MyDatetimeoffset DATETIMEOFFSET(7);CREATE TABLE Table1 (Column1 DATETIMEOFFSET(7)); |
| Varsayılan dize değişmez değerleri biçimleri (alt düzey istemci için kullanılır) | yyyy-MM-dd SS:mm:ss[.nnnnnnn] [{+|-}hh:mm] Daha fazla bilgi için aşağıdaki alt düzey istemciler için geriye dönük uyumluluk bölümüne bakın. |
| Tarih aralığı |
0001-01-01 ile 9999-12-31 arasında1 Ocak CE - 31 Aralık 9999 CE |
| Zaman aralığı |
00:00:00 ile 23:59:59.9999999 arasında |
| Saat dilimi uzaklık aralığı |
-14:00 ile +14:00 arasında |
| Öğe aralıkları |
yyyy , ile arasında bir 00019999yılı temsil eden dört basamaktır.MM, belirtilen yıldaki bir ayı temsil eden 01 ile 12arasında değişen iki basamaktır.dd, belirtilen ayın gününü temsil eden, aya 01 bağlı olarak arasında değişen 31 iki basamaktır.HH, saati temsil eden 00 ile 23arasında değişen iki basamaktır.mm, dakikayı temsil eden 00 ile 59arasında değişen iki basamaktır.ss, ikinciyi temsil eden 00 ile 59arasında değişen iki basamaktır.n , kesirli saniyeleri temsil eden ile arasında değişen 09999999sıfır ile yedi basamaktır.hh , ile -14+14arasında iki basamaktır.mm , ile 0059arasında iki basamaktır. |
| Karakter uzunluğu | En az 26 konum (yyyy-MM-dd SS:mm:ss {+|-}hh:mm) ile en fazla 34 (yyyy-MM-dd SS:mm:ss.nnnnnnnn {+|-}hh:mm) |
| Duyarlık, ölçek | Aşağıdaki tabloya bakın. |
| Depolama boyutu | Sabit olan 10 bayt, varsayılan olarak 100 ns kesirli ikinci duyarlık ile varsayılan değerdir. |
| Accuracy | 100 nanosaniye |
| Varsayılan değer | 1900-01-01 00:00:00 00:00 |
| Calendar | Gregorian |
| kullanıcı tanımlı kesirli ikinci duyarlık |
Yes |
| Saat dilimi fark ve koruma | Yes |
| Gün ışığından yararlanmaya duyarlı | No |
| Belirtilen ölçek | Sonuç (duyarlık, ölçek) | Sütun uzunluğu (bayt) | Kesirli saniye duyarlığı |
|---|---|---|---|
| datetimeoffset | (34, 7) | 10 | 7 |
| datetimeoffset(0) | (26, 0) | 8 | 0 -2 |
| datetimeoffset(1) | (28, 1) | 8 | 0 -2 |
| datetimeoffset(2) | (29, 2) | 8 | 0 -2 |
| datetimeoffset(3) | (30, 3) | 9 | 3 - 4 |
| datetimeoffset(4) | (31, 4) | 9 | 3 - 4 |
| datetimeoffset(5) | (32, 5) | 10 | 5 - 7 |
| datetimeoffset(6) | (33, 6) | 10 | 5 - 7 |
| datetimeoffset(7) | (34, 7) | 10 | 5 - 7 |
datetimeoffset için desteklenen dize değişmez değerleri biçimleri
Aşağıdaki tabloda datetimeoffset için desteklenen ISO 8601 dize değişmez değerleri listelenmektedir. datetimeoffset'in tarih ve saat bölümleri için alfabetik, sayısal, ayrılmamış ve saat biçimleri hakkında bilgi için bkz. tarih ve saat.
| ISO 8601 | Description |
|---|---|
| yyyy-MM-ddTHH:mm:ss[.nnnnnnn][{+|-}hh:mm] | Bu iki biçim ve SET LANGUAGE oturum yerel ayarı ayarlarından SET DATEFORMAT etkilenmez.
Datetimeoffset ile datetime bölümleri arasında boşluklara izin verilmez. |
| yyyy-MM-ddTHH:mm:ss[.nnnnnnn]Z (UTC) | ISO tanımına göre bu biçim , tarih saat bölümünün Eşgüdümlü Evrensel Saat (UTC) ile ifade edilmesi gerektiğini gösterir. Örneğin, 1999-12-12 12:30:30.12345 -07:00 olarak 1999-12-12 19:30:30.12345Ztemsil edilmelidir. |
Aşağıdaki örnek, bir dizeyi her tarih ve saat veri türüne dönüştürmenin sonuçlarını karşılaştırır.
SELECT CAST ('2007-05-08 12:35:29. 1234567 +12:15' AS TIME (7)) AS 'time',
CAST ('2007-05-08 12:35:29. 1234567 +12:15' AS DATE) AS 'date',
CAST ('2007-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime',
CAST ('2007-05-08 12:35:29.123' AS DATETIME) AS 'datetime',
CAST ('2007-05-08 12:35:29.1234567+12:15' AS DATETIME2 (7)) AS 'datetime2',
CAST ('2007-05-08 12:35:29.1234567 +12:15' AS DATETIMEOFFSET (7)) AS 'datetimeoffset',
CAST ('2007-05-08 12:35:29.1234567+12:15' AS DATETIMEOFFSET (7)) AS 'datetimeoffset ISO8601';
Sonuç kümesi aşağıdadır.
| Veri türü | Output |
|---|---|
time |
12:35:29.1234567 |
date |
2007-05-08 |
smalldatetime |
2007-05-08 12:35:00 |
datetime |
2007-05-08 12:35:29.123 |
datetime2 |
2007-05-08 12:35:29.1234567 |
datetimeoffset |
2007-05-08 12:35:29.1234567 +12:15 |
datetimeoffset ISO8601 |
2007-05-08 12:35:29.1234567 +12:15 |
Saat dilimi farkı
Saat dilimi uzaklığı, bir saat veya tarih saat değeri için UTC'den bölge uzaklığını belirtir. Saat dilimi uzaklığı [+|-] ss:dk olarak gösterilebilir:
hh, arasında değişen0014ve saat dilimi uzaklığındaki saat sayısını temsil eden iki basamaktır.mm, saat dilimi uzaklığındaki ek dakika sayısını temsil eden, ile0059arasında değişen iki basamaktır.+(artı) veya-(eksi), saat dilimi uzaklığı için zorunlu işarettir. Bu işaret, yerel saati elde etmek için utc saatinden saat dilimi uzaklığının eklendiğini veya çıkarılıp çıkarılmadığını gösterir. Geçerli saat dilimi uzaklığı aralığı ile-14:00+14:00arasındadır.
Saat dilimi uzaklık aralığı, XSD şema tanımı için W3C XML standardını izler ve SQL 2003 standart tanımından 12:59+14:00biraz farklıdır.
İsteğe bağlı tür parametresi kesirli saniye duyarlığı, saniyelerin kesirli bölümü için basamak sayısını belirtir. Bu değer 0 ile 7 (100 nanosaniye) olan bir tamsayı olabilir. Varsayılan kesirli saniye duyarlığı 100 ns'dir (saniyelerin kesirli kısmı için yedi basamak).
Veriler veritabanında depolanır ve UTC'de olduğu gibi sunucuda işlenir, karşılaştırılır, sıralanır ve dizine eklenir. Saat dilimi uzaklığı veritabanında alınmak üzere korunur.
Verilen saat dilimi uzaklığının gün ışığından yararlanma saati (DST) olarak kabul edilir ve DST dönemindeki herhangi bir tarih saat için ayarlanır.
datetimeoffset türü için, ekleme, güncelleştirme, aritmetik, dönüştürme veya atama işlemleri sırasında hem UTC hem de yerel (kalıcı veya dönüştürülmüş saat dilimi uzaklığı için) tarih saat değeri doğrulanır. Geçersiz UTC veya yerel (kalıcı veya dönüştürülmüş saat dilimi uzaklığı için) tarih saat değerinin algılanması geçersiz bir değer hatasına neden olur. Örneğin, 9999-12-31 10:10:00 UTC'de geçerlidir, ancak yerel saat dilimindeki taşmalar saat dilimi uzaklığıdır +13:50.
Saat dilimi dönüştürme söz dizimi
SQL Server 2016 (13.x), yaz saati kullanan evrensel saat dilimi dönüştürmelerini kolaylaştırmak için söz dizimini kullanıma sunar AT TIME ZONE . Bu söz dizimi özellikle saat dilimi uzaklıkları olmayan verileri saat dilimi uzaklıkları olan verilere dönüştürürken kullanışlıdır. Hedef saat diliminde karşılık gelen bir datetimeoffset değerine dönüştürmek için bkz. SAAT DILIMINDE.
ANSI ve ISO 8601 uyumluluğu
Tarih ve saat makalelerinin ANSI ve ISO 8601 uyumluluk bölümleri datetimeoffset için geçerlidir.
Alt düzey istemciler için geriye dönük uyumluluk
Bazı alt düzey istemciler saat, tarih, datetime2 ve datetimeoffset veri türlerini desteklemez . Aşağıdaki tabloda, SQL Server'ın üst düzey bir örneği ile alt düzey istemciler arasındaki tür eşlemesi gösterilmektedir.
| SQL Server veri türü | Alt düzey istemciye geçirilen varsayılan dize değişmez değeri biçimi | Alt düzey ODBC | Alt düzey OLEDB | Alt düzey JDBC | Alt düzey SQLCLIENT |
|---|---|---|---|---|---|
| time | HH:mm:ss[.nnnnnnn] |
SQL_WVARCHAR veya SQL_VARCHAR |
DBTYPE_WSTRor DBTYPE_STR |
Java.sql.String |
String veya SqString |
| date | yyyy-MM-dd |
SQL_WVARCHAR veya SQL_VARCHAR |
DBTYPE_WSTRor DBTYPE_STR |
Java.sql.String |
String veya SqString |
| datetime2 | yyyy-MM-dd SS:mm:ss[.nnnnnnn] |
SQL_WVARCHAR veya SQL_VARCHAR |
DBTYPE_WSTRor DBTYPE_STR |
Java.sql.String |
String veya SqString |
| datetimeoffset | yyyy-MM-dd SS:mm:ss[.nnnnnnn] [+|-]hh:mm |
SQL_WVARCHAR veya SQL_VARCHAR |
DBTYPE_WSTRor DBTYPE_STR |
Java.sql.String |
String veya SqString |
Microsoft Fabric desteği
Microsoft Fabric'te şu anda datetimeoffset veri türüne sahip sütunlar oluşturamazsınız, ancak verileri SAAT DILIMINDE işleviyle dönüştürmek için datetimeoffset kullanabilirsiniz, örneğin:
SELECT CAST (CAST ('2024-07-03 00:00:00' AS DATETIMEOFFSET) AT TIME ZONE 'Pacific Standard Time' AS DATETIME2) AS PST;
Microsoft Fabric SQL veritabanında: 7 basamağın duyarlığı kullanılabilir, ancak Doku OneLake'e yansıtılan verilerin saat dilimi ve yedinci saat ondalık kırpılmış olur. Bu sütun türü, Doku SQL veritabanındaki tablolarda birincil anahtar olarak kullanılamaz.
Tarih ve saat verilerini dönüştürme
Tarih ve saat veri türlerine dönüştürdüğünüzde, SQL Server tarih veya saat olarak tanıyamayan tüm değerleri reddeder.
CAST ve CONVERT işlevlerini tarih ve saat verileriyle kullanma hakkında bilgi için bkz. CAST ve CONVERT.
datetimeoffset veri türüne dönüştür
Bu bölümde, yeni bir datetimeoffset veri türü sütununa uzaklık olmadan bir veri türünden verileri güncelleştirme örneği sağlanır.
İlk olarak, sys.time_zone_info sistem kataloğu görünümünden saat dilimi adını doğrulayın.
SELECT * FROM sys.time_zone_info WHERE name = 'Pacific Standard Time';
Aşağıdaki örnek , SAAT DILIMINDE söz dizimini iki kez kullanır. Örnek kod bir tablo dbo.Auditoluşturur, birden çok yaz saati değişikliğine yayılan veriler ekler ve yeni bir datetimeoffset sütunu ekler. Sütunun AuditCreated uzaklıkları olmayan bir *datetime2 veri türü olduğunu ve UTC saat dilimi kullanılarak yazıldığını varsayıyoruz.
deyiminde UPDATE , AT TIME ZONE söz dizimi önce var olan AuditCreated sütun verilerine UTC saat dilimi uzaklığını ekler, ardından verileri UTC'den Pacific Standard Timeöğesine dönüştürür ve ABD'deki her geçmiş yaz saati aralığı için geçmiş verileri doğru şekilde ayarlar.
CREATE TABLE dbo.Audit (AuditCreated DATETIME2 (0) NOT NULL);
GO
INSERT INTO dbo.Audit (AuditCreated)
VALUES ('1/1/2024 12:00:00');
INSERT INTO dbo.Audit (AuditCreated)
VALUES ('5/1/2024 12:00:00');
INSERT INTO dbo.Audit (AuditCreated)
VALUES ('12/1/2024 12:00:00');
GO
ALTER TABLE dbo.Audit
ADD AuditCreatedOffset DATETIMEOFFSET (0) NULL;
GO
DECLARE @TimeZone AS VARCHAR (50);
SELECT @TimeZone = [name]
FROM sys.time_zone_info
WHERE [name] = 'Pacific Standard Time';
UPDATE dbo.Audit
SET AuditCreatedOffset = AuditCreated
AT TIME ZONE 'UTC' AT TIME ZONE @TimeZone
WHERE AuditCreatedOffset IS NULL;
GO
SELECT *
FROM dbo.Audit;
Sonuç kümesi aşağıdadır.
AuditCreated AuditCreatedOffset
------------------- --------------------------
2024-01-01 12:00:00 2024-01-01 04:00:00 -08:00
2024-05-01 12:00:00 2024-05-01 05:00:00 -07:00
2024-12-01 12:00:00 2024-12-01 04:00:00 -08:00
datetimeoffset veri türünü diğer tarih ve saat türlerine dönüştürme
Bu bölümde , bir datetimeoffset veri türü diğer tarih ve saat veri türlerine dönüştürüldüğünde nelerin oluştuğu açıklanmaktadır.
Tarihe dönüştürdüğünüzde yıl, ay ve gün kopyalanır. Aşağıdaki kod, bir datetimeoffset(4) değerini tarih değerine dönüştürmenin sonuçlarını gösterir.
DECLARE @datetimeoffset AS DATETIMEOFFSET (4) = '12-10-25 12:32:10 +01:00';
DECLARE @date AS DATE = @datetimeoffset;
SELECT @datetimeoffset AS '@datetimeoffset', @date AS 'date';
Sonuç kümesi aşağıdadır.
@datetimeoffset date
------------------------------ ----------
2025-12-10 12:32:10.0000 +01:0 2025-12-10
Dönüştürme saat(n) ise, saat, dakika, saniye ve kesirli saniye kopyalanır. Saat dilimi değeri kesilir. datetimeoffset(n) değerinin duyarlığı time(n) değerinin duyarlığından büyük olduğunda, değer yukarı yuvarlanır. Aşağıdaki kod, bir datetimeoffset(4) değerini bir time(3) değerine dönüştürmenin sonuçlarını gösterir.
DECLARE @datetimeoffset AS DATETIMEOFFSET (4) = '12-10-25 12:32:10.1237 +01:0';
DECLARE @time AS TIME (3) = @datetimeoffset;
SELECT @datetimeoffset AS '@datetimeoffset ', @time AS 'time';
Sonuç kümesi aşağıdadır.
@datetimeoffset time
------------------------------- ------------
2025-12-10 12:32:10.1237 +01:00 12:32:10.124
Tarih saatine dönüştürdüğünüzde, tarih ve saat değerleri kopyalanır ve saat dilimi kesilir. datetimeoffset(n) değerinin kesirli duyarlığı üç basamaktan büyükse, değer kesilir. Aşağıdaki kod, bir datetimeoffset(4) değerini datetime değerine dönüştürmenin sonuçlarını gösterir.
DECLARE @datetimeoffset AS DATETIMEOFFSET (4) = '12-10-25 12:32:10.1237 +01:0';
DECLARE @datetime AS DATETIME = @datetimeoffset;
SELECT @datetimeoffset AS '@datetimeoffset ', @datetime AS 'datetime';
Sonuç kümesi aşağıdadır.
@datetimeoffset datetime
------------------------------ -----------------------
2025-12-10 12:32:10.1237 +01:0 2025-12-10 12:32:10.123
Smalldatetime dönüştürmeleri için tarih ve saatler kopyalanır. Dakikalar saniye değerine göre yukarı yuvarlanıp saniyeler 0 olarak ayarlanır. Aşağıdaki kod, bir datetimeoffset(3) değerini smalldatetime değerine dönüştürmenin sonuçlarını gösterir.
DECLARE @datetimeoffset AS DATETIMEOFFSET (3) = '1912-10-25 12:24:32 +10:0';
DECLARE @smalldatetime AS SMALLDATETIME = @datetimeoffset;
SELECT @datetimeoffset AS '@datetimeoffset', @smalldatetime AS '@smalldatetime';
Sonuç kümesi aşağıdadır.
@datetimeoffset @smalldatetime
------------------------------ -----------------------
1912-10-25 12:24:32.000 +10:00 1912-10-25 12:25:00
Dönüştürme datetime2(n)ise, tarih ve saat datetime2 değerine kopyalanır ve saat dilimi kesilir. datetime2(n) değerinin duyarlığı datetimeoffset(n) değerinin duyarlığından büyük olduğunda kesirli saniyeler sığacak şekilde kesilir. Aşağıdaki kod, bir datetimeoffset(4) değerini datetime2(3) değerine dönüştürmenin sonuçlarını gösterir.
DECLARE @datetimeoffset AS DATETIMEOFFSET (4) = '1912-10-25 12:24:32.1277 +10:0';
DECLARE @datetime2 AS DATETIME2 (3) = @datetimeoffset;
SELECT @datetimeoffset AS '@datetimeoffset', @datetime2 AS '@datetime2';
Sonuç kümesi aşağıdadır.
@datetimeoffset @datetime2
---------------------------------- ----------------------
1912-10-25 12:24:32.1277 +10:00 1912-10-25 12:24:32.12
Dize değişmez değerlerini datetimeoffset'e dönüştürme
Dizelerin tüm bölümleri geçerli biçimlerdeyse, dize değişmez değerlerinden tarih ve saat türlerine dönüştürmelere izin verilir. Aksi takdirde bir çalışma zamanı hatası oluşur. Tarih ve saat türlerinden dize değişmez değerlerine kadar bir stil belirtmeyen örtük dönüştürmeler veya açık dönüştürmeler geçerli oturumun varsayılan biçimindedir. Aşağıdaki tabloda, bir dize değişmez değerini datetimeoffset veri türüne dönüştürme kuralları gösterilmektedir.
| Giriş dizesi değişmez değeri | datetimeoffset(n) |
|---|---|
ODBC DATE |
ODBC dize değişmez değerleri datetime veri türüne eşlenir. Değişmez değerlerden ODBC DATETIMEdatetimeoffset türlerine yapılan herhangi bir atama işlemi, dönüştürme kuralları tarafından tanımlandığı gibi datetime ile bu tür arasında örtük bir dönüştürmeye neden olur. |
ODBC TIME |
Önceki ODBC DATE kurala bakın |
ODBC DATETIME |
Önceki ODBC DATE kurala bakın |
DATE sadece |
Bölümü TIME varsayılan olarak olarak 00:00:00gösterilir. Varsayılan TIMEZONE değer: +00:00 |
TIME sadece |
Bölümü DATE varsayılan olarak olarak 1900-1-1gösterilir. Varsayılan TIMEZONE değer: +00:00 |
TIMEZONE sadece |
Varsayılan değerler sağlanır |
DATE + TIME |
Varsayılan TIMEZONE değer: +00:00 |
DATE + TIMEZONE |
İzin verilmedi |
TIME + TIMEZONE |
Bölüm DATE varsayılan olarak 1900-1-1 |
DATE + TIME + TIMEZONE |
Trivial |