Aracılığıyla paylaş


datetime2 (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft Fabric'teki SQL veritabanı

24 saatlik saati temel alan günün saatiyle birleştirilmiş bir tarih tanımlar. datetime2 , daha büyük bir tarih aralığına, daha büyük bir varsayılan kesir duyarlığına ve isteğe bağlı olarak kullanıcı tarafından belirtilen duyarlığa sahip mevcut tarih saat türünün bir uzantısı olarak kabul edilebilir.

datetime2 açıklaması

Property Value
Syntax datetime2 [ (kesirli saniye duyarlığı) ]
Usage DECLARE @MyDatetime2 datetime2(7);
CREATE TABLE Table1 (Column1 datetime2(7));
Varsayılan dize değişmez değeri biçimi

(alt düzey istemci için kullanılır)
yyyy-MM-dd HH:mm:ss[.nnnnnnn]

Daha fazla bilgi için bu makalenin devamında yer alan 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ında

1 Ocak CE - 31 Aralık 9999 CE
Zaman aralığı 00:00:00 ile 23:59:59.9999999 arasında
Saat dilimi uzaklık aralığı None
Eleman aralıkları yyyy , ile arasında bir 00019999yılı temsil eden dört basamaklı bir sayıdır.

MM , belirtilen yıldaki bir ayı temsil eden ile arasında değişen 0112iki basamaklı bir sayıdır.

dd, belirtilen ayın gününü temsil eden aya 01 göre değişen 31 iki basamaklı bir sayıdır.

HH , ile arasında değişen 0023ve saati temsil eden iki basamaklı bir sayıdır.

mm , dakikayı temsil eden ile arasında değişen 0059iki basamaklı bir sayıdır.

ss , ikincisini temsil eden ile arasında değişen 0059iki basamaklı bir sayıdır.

n* , kesirli saniyeleri temsil eden sıfırdan 0 yedi basamaklı bir sayıdır 9999999. Informatica'da, n değerinden küçük 3olduğunda kesirli saniyeler kesilir.
Karakter uzunluğu En az 19 konum (yyyy-MM-dd HH:mm:ss) ile en fazla 27 (yyyy-MM-dd HH:mm:ss.0000000) arasında
Hassasiyet, ölçek 100 nanosaniye (100 ns) doğrulukla 0 ile 7 basamak arasında. Varsayılan duyarlık 7 basamaktır.

Microsoft Fabric Veri Ambarı'nda bu duyarlık, varsayılan değer olmadan 0 ile 6 arasından bir tamsayı olabilir. Duyarlık, Microsoft Fabric Veri Ambarı'nda belirtilmelidir.
Depolama boyutu 1 3'ten az duyarlık için 6 bayt.
Duyarlık 3 veya 4 için 7 bayt.

Diğer tüm duyarlık 8 bayt gerektirir. 2
Accuracy 100 nanosaniye
Varsayılan değer 1900-01-01 00:00:00
Calendar Gregorian
Kullanıcı tanımlı kesirli ikinci duyarlık Yes
Saat dilimi fark fark ve koruma No
Gün ışığından yararlanmaya duyarlı No

1 Sağlanan değerler sıkıştırılmamış satır deposu içindir. Veri sıkıştırma veya columnstore kullanımı her duyarlık için depolama boyutunu değiştirebilir. Ayrıca diskteki ve bellekteki depolama boyutu farklılık gösterebilir. Örneğin, toplu iş modu kullanıldığında datetime2 değerleri her zaman bellekte 8 bayt gerektirir.

2Datetime2 değeri bir varbinary değere atandığında, duyarlığı depolamak için varbinary değerine fazladan bir bayt eklenir.

Veri türü meta verileri için bkz . sys.systypes veya TYPEPROPERTY. Duyarlık ve ölçek, bazı tarih ve saat veri türleri için değişkendir. Bir sütunun duyarlığı ve ölçeğini almak için bkz. COLUMNPROPERTY, COL_LENGTH veya sys.columns.

Datetime2 için desteklenen dize değişmez değerleri biçimleri

Aşağıdaki tablolarda datetime2 için desteklenen ISO 8601 ve ODBC dize değişmez değerleri listelenmektedir. datetime2'nin 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 Descriptions
yyyy-MM-ddTHH:mm:ss[.nnnnnnn] Bu biçim ve SET LANGUAGE oturum yerel ayarı ayarlarından SET DATEFORMAT etkilenmez. T, iki nokta üst üste (): ve nokta (.) dize değişmez değerine eklenir, örneğin2024-05-02T19:58:47.1234567.
ODBC Description
{ ts 'yyyy-MM-dd HH:mm:ss[.nnnnnnn]' } ODBC API'lerine özgü:

Kesirli saniyeleri temsil eden ondalık ayırıcının sağındaki basamak sayısı 0'dan 7'ye (100 nanosaniye) kadar belirtilebilir.

ANSI ve ISO 8601 uyumluluğu

ANSI ve ISO 8601 tarih ve saat uyumluluğu datetime2 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 Dize veya SqString
date yyyy-MM-dd SQL_WVARCHAR veya SQL_VARCHAR DBTYPE_WSTRor DBTYPE_STR Java.sql.String Dize veya SqString
datetime2 yyyy-MM-dd SS:mm:ss[.nnnnnnn] SQL_WVARCHAR veya SQL_VARCHAR DBTYPE_WSTRor DBTYPE_STR Java.sql.String Dize veya SqString
datetimeoffset yyyy-MM-dd SS:mm:ss[.nnnnnnn] [+|-]hh:mm SQL_WVARCHAR veya SQL_VARCHAR DBTYPE_WSTRor DBTYPE_STR Java.sql.String Dize veya SqString

Tarih ve saat verilerini dönüştürme

Tarih ve saat veri türlerine dönüştürdüğünüzde, Veritabanı Altyapısı 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

Diğer tarih ve saat türlerini datetime2 veri türüne dönüştürme

Bu bölümde, diğer tarih ve saat veri türleri datetime2 veri türüne dönüştürüldüğünde nelerin oluştuğu açıklanmaktadır.

Dönüştürme tarihtenolduğunda, yıl, ay ve gün kopyalanır. Zaman bileşeni 00:00:00.0000000 olarak ayarlanır. Aşağıdaki kod, bir date değerini datetime2 bir değere dönüştürmenin sonuçlarını gösterir.

DECLARE @date AS DATE = '12-21-16';

DECLARE @datetime2 AS DATETIME2 = @date;

SELECT @datetime2 AS '@datetime2',
       @date AS '@date';

Sonuç kümesi aşağıdadır.

@datetime2                  @date
--------------------------- ----------
2016-12-21 00:00:00.0000000 2016-12-21

Dönüştürme zamanı (n) olduğunda, saat bileşeni kopyalanır ve tarih bileşeni olarak 1900-01-01ayarlanır. Aşağıdaki örnek, bir time(7) değerini datetime2 değerine dönüştürmenin sonuçlarını gösterir.

DECLARE @time AS TIME (7) = '12:10:16.1234567';

DECLARE @datetime2 AS DATETIME2 = @time;

SELECT @datetime2 AS '@datetime2',
       @time AS '@time';

Sonuç kümesi aşağıdadır.

@datetime2                  @time
--------------------------- ----------------
1900-01-01 12:10:16.1234567 12:10:16.1234567

Dönüştürme smalldatetimeolduğunda, saatler ve dakikalar kopyalanır. Saniyeler ve kesirli saniyeler 0 olarak ayarlanır. Aşağıdaki kod, bir smalldatetime değerini datetime2 bir değere dönüştürmenin sonuçlarını gösterir.

DECLARE @smalldatetime AS SMALLDATETIME = '12-01-16 12:32';

DECLARE @datetime2 AS DATETIME2 = @smalldatetime;

SELECT @datetime2 AS '@datetime2',
       @smalldatetime AS '@smalldatetime';

Sonuç kümesi aşağıdadır.

@datetime2                  @smalldatetime
--------------------------- -----------------------
2016-12-01 12:32:00.0000000 2016-12-01 12:32:00

Dönüştürme datetimeoffset(n)'den olduğunda, tarih ve saat bileşenleri kopyalanır. Saat dilimi kesilir. Aşağıdaki örnekte, bir datetimeoffset(7) değerini datetime2 bir değere dönüştürmenin sonuçları gösterilmektedir.

DECLARE @datetimeoffset AS DATETIMEOFFSET (7) = '2016-10-23 12:45:37.1234567 +10:0';

DECLARE @datetime2 AS DATETIME2 = @datetimeoffset;

SELECT @datetime2 AS '@datetime2',
       @datetimeoffset AS '@datetimeoffset';

Sonuç kümesi aşağıdadır.

@datetime2                  @datetimeoffset
--------------------------- ----------------------------------
2016-10-23 12:45:37.1234567 2016-10-23 12:45:37.1234567 +10:00

Dönüştürme tarih saatinden geldiğinde, tarih ve saat kopyalanır. Kesirli duyarlık 7 basamağı genişletilmiştir. Aşağıdaki örnekte, bir datetime değerini datetime2 bir değere dönüştürmenin sonuçları gösterilmektedir.

DECLARE @datetime AS DATETIME = '2016-10-23 12:45:37.333';

DECLARE @datetime2 AS DATETIME2 = @datetime;

SELECT @datetime2 AS '@datetime2',
       @datetime AS '@datetime';

Sonuç kümesi aşağıdadır.

@datetime2                  @datetime
----------------------- ---------------------------
2016-10-23 12:45:37.3333333 2016-10-23 12:45:37.333

datetime kullanılırken açıkça datetime2'ye atama

Veritabanı uyumluluk düzeyi 130 ve üzeri altında, datetime'dan datetime2 veri türlerine örtük dönüştürmeler, kesirli milisaniyeleri hesaplayarak geliştirilmiş doğruluğu gösterir ve önceki örnekte görüldüğü gibi farklı dönüştürülmüş değerler elde edilir. datetime ile datetime2 veri türleri arasında karma bir karşılaştırma senaryosu olduğunda, datetime2 veri türüne açık atama kullanın. Daha fazla bilgi için bkz. Bazı veri türlerini ve yaygın olmayan işlemleri işlemeye yönelik SQL Server ve Azure SQL Veritabanı geliştirmeleri.

Dize değişmez değerlerini datetime2'ye 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 datetime2 veri türüne dönüştürme kuralları gösterilmektedir.

Giriş dizesi değişmez değeri datetime2(n)
ODBC DATE ODBC dize değişmez değerleri datetime veri türüne eşlenir. Değişmez değerlerden ODBC DATETIMEdatetime2 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.
TIME sadece Bölümü DATE varsayılan olarak olarak 1900-01-01gösterilir.
TIMEZONE sadece Varsayılan değerler sağlanır.
DATE + TIME Önem -siz.
DATE + TIMEZONE İzin verilmiyor.
TIME + TIMEZONE Bölüm DATE varsayılan olarak 1900-1-1'e ayarlı. TIMEZONE girdisi yoksayılır.
DATE + TIME + TIMEZONE Yerel DATETIME kullanılır.

Examples

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';

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