Tarih ve saat verileri

SQL Server 2008, tarih ve saat bilgilerini işlemek için yeni veri türleri kullanıma sunulmuştur. Yeni veri türleri tarih ve saat için ayrı türler ve daha geniş aralık, duyarlık ve saat dilimi farkındalığı olan genişletilmiş veri türleri içeriyor. .NET Framework sürüm 3.5 Hizmet Paketi (SP) 1'den başlayarak, SQL Server (System.Data.SqlClient) için .NET Framework Veri Sağlayıcısı, SQL Server 2008 Veritabanı Altyapısı'nın tüm yeni özellikleri için tam destek sağlar. Bu yeni özellikleri SqlClient ile kullanmak için .NET Framework 3.5 SP1 (veya üzeri) yüklemeniz gerekir.

SQL Server 2008'den önceki SQL Server sürümlerinde, tarih ve saat değerleriyle çalışmak için yalnızca iki veri türü vardı: datetime ve smalldatetime. Bu veri türlerinin her ikisi de hem tarih değerini hem de saat değerini içerir ve bu da yalnızca tarih veya yalnızca saat değerleriyle çalışmayı zorlaştırır. Ayrıca, bu veri türleri yalnızca 1753'te gregoryen takvimin İngiltere'de kullanıma sunulmasından sonra oluşan tarihleri destekler. Bir diğer sınırlama da, bu eski veri türlerinin saat dilimini algılamamasıdır ve bu da birden çok saat diliminden kaynaklanan verilerle çalışmayı zorlaştırır.

SQL Server'daki tarih ve saat türleri hakkında daha fazla bilgi için bkz . Tarih ve Saat Veri Türleri ve İşlevleri.

SQL Server 2008'de Tanıtılan Tarih/Saat Veri Türleri

Aşağıdaki tabloda yeni tarih ve saat veri türleri açıklanmaktadır.

SQL Server veri türü Açıklama
date Veri date türünün 1 Ocak 01 ile 31 Aralık 9999 arasında bir aralığı vardır ve doğruluk değeri 1 gündür. Varsayılan değer 1 Ocak 1900'dür. Depolama boyutu 3 bayttır.
time time Veri türü yalnızca saat değerlerini 24 saatlik saate göre depolar. Veri time türü 00:00:00.0000000 ile 23:59:59.99999999 arasında 100 nanosaniyelik bir doğruluk aralığına sahiptir. Varsayılan değer: 00:00:00.00000000 (gece yarısı). time Veri türü, kullanıcı tanımlı kesirli ikinci duyarlığı destekler ve depolama boyutu belirtilen duyarlık temelinde 3 ila 6 bayt arasında değişir.
datetime2 datetime2 Veri türü, ve time veri türlerinin aralığını ve duyarlıklarını date tek bir veri türünde birleştirir.

Varsayılan değerler ve dize değişmez değerleri, ve time veri türlerinde date tanımlananlarla aynıdır.
datetimeoffset Veri datetimeoffset türü, ek bir saat dilimi uzaklığı ile tüm özelliklerine datetime2 sahiptir. Saat dilimi uzaklığı [+|-] SS:MM olarak temsil edilir. SS, saat dilimi uzaklığındaki saat sayısını temsil eden 00 ile 14 arasında 2 basamaktır. MM, saat dilimi uzaklığındaki ek dakika sayısını temsil eden 00 ile 59 arasında değişen 2 basamaktır. Zaman biçimleri 100 nanosaniyeye kadar desteklenir. Zorunlu + veya - işareti, yerel saati elde etmek için saat dilimi uzaklığının UTC'den (Evrensel Saat Koordinatı veya Greenwich Saati) eklenip eklenmediğini veya çıkarılıp çıkarılmadığını gösterir.

Not

anahtar sözcüğünü Type System Version kullanma hakkında daha fazla bilgi için bkz ConnectionString. .

Tarih Biçimi ve Tarih Sırası

SQL Server'ın tarih ve saat değerlerini ayrıştırması yalnızca tür sistemi sürümüne ve sunucu sürümüne değil, aynı zamanda sunucunun varsayılan dil ve biçim ayarlarına da bağlıdır. Sorgu farklı bir dil ve tarih biçimi ayarı kullanan bir bağlantı tarafından yürütülürse, bir dilin tarih biçimleri için çalışan bir tarih dizesi tanınmayabilir.

Transact-SQL SET LANGUAGE deyimi, tarih bölümlerinin sırasını belirleyen DATEFORMAT'ı örtük olarak ayarlar. Tarih bölümlerini MDY, DMY, YMD, YDM, MYD veya DYM sırasına göre sıralayarak tarih değerlerini belirlemek için bağlantıda SET DATEFORMAT Transact-SQL deyimini kullanabilirsiniz.

Bağlantı için herhangi bir DATEFORMAT belirtmezseniz, SQL Server bağlantıyla ilişkili varsayılan dili kullanır. Örneğin, '01/02/03' tarih dizesi, İngilizce dil ayarına sahip bir sunucuda MDY (2 Ocak 2003) ve İngilizce dil Birleşik Devletler ayarına sahip bir sunucuda DMY (1 Şubat 2003) olarak yorumlanır. Yıl, SQL Server'ın century değerini atamak için kesme tarihini tanımlayan kesme yılı kuralı kullanılarak belirlenir. Daha fazla bilgi için bkz . iki basamaklı yıl kesme Seçeneği.

Not

YDM tarih biçimi, bir dize biçiminden , , timedatetime2veya datetimeoffsetöğesine datedönüştürülürken desteklenmez.

SQL Server'ın tarih ve saat verilerini yorumlaması hakkında daha fazla bilgi için bkz . Tarih ve Saat Verilerini Kullanma.

Tarih/Saat Veri Türleri ve Parametreleri

Yeni tarih ve saat veri türlerini desteklemek için aşağıdaki numaralandırmalar eklendi SqlDbType .

  • SqlDbType.Date

  • SqlDbType.Time

  • SqlDbType.DateTime2

  • SqlDbType.DateTimeOffSet

Önceki SqlDbType sabit listelerinden birini kullanarak öğesinin SqlParameter veri türünü belirtebilirsiniz.

Not

öğesinin DbType SqlParameter özelliğini olarak SqlDbType.Dateayarlayamazsınız.

Ayrıca, bir nesnenin özelliğini SqlParameter belirli DbType bir SqlParameter sabit listesi değerine ayarlayarak DbType genel olarak türünü belirtebilirsiniz. ve datetimeoffset veri türlerini desteklemek datetime2 için aşağıdaki DbType numaralandırma değerleri eklendi:

  • DbType.DateTime2

  • DbType.DateTimeOffset

Bu yeni numaralandırmalar Date, .NET Framework'ün önceki sürümlerinde bulunan , Timeve DateTime numaralandırmalarını destekler.

Parametre nesnesinin .NET Framework veri sağlayıcısı türü, parametre nesnesinin değerinin .NET Framework türünden veya DbType parametre nesnesinin türünden çıkarılır. Yeni System.Data.SqlTypes tarih ve saat veri türlerini desteklemek için yeni veri türü kullanılmamıştır. Aşağıdaki tabloda SQL Server 2008 tarih ve saat veri türleri ile CLR veri türleri arasındaki eşlemeler açıklanmaktadır.

SQL Server veri türü .NET Framework türü System.Data.SqlDbType System.Data.DbType
tarih System.DateTime Tarih Tarih
time System.TimeSpan Saat Saat
datetime2 System.DateTime DateTime2 DateTime2
datetimeoffset System.DateTimeOffset DateTimeOffset DateTimeOffset
datetime System.DateTime DateTime DateTime
smalldatetime System.DateTime DateTime DateTime

SqlParameter Özellikleri

Aşağıdaki tabloda tarih ve saat veri türleriyle ilgili özellikler açıklanmaktadır SqlParameter .

Özellik Açıklama
IsNullable Değerin null atanabilir olup olmadığını alır veya ayarlar. Sunucuya null parametre değeri gönderdiğinizde, (Nothing Visual Basic'te) yerine null belirtmelisinizDBNull. Veritabanı null değerleri hakkında daha fazla bilgi için bkz . Null Değerleri İşleme.
Precision Değeri temsil etmek için kullanılan en fazla basamak sayısını alır veya ayarlar. Bu ayar, tarih ve saat veri türleri için yoksayılır.
Scale Değerin zaman bölümünün , DateTime2ve DateTimeOffsetiçin Timeçözümlendiği ondalık basamak sayısını alır veya ayarlar. Varsayılan değer 0'dır, yani gerçek ölçek değerden çıkarılır ve sunucuya gönderilir.
Size Tarih ve saat veri türleri için yoksayılır.
Value Parametre değerini alır veya ayarlar.
SqlValue Parametre değerini alır veya ayarlar.

Not

Sıfırdan küçük veya 24 saatten büyük veya buna eşit zaman değerleri bir ArgumentExceptionoluşturur.

Parametre Oluşturma

Oluşturucusunu kullanarak veya yöntemini çağırarak Add bir koleksiyona ekleyerek birParameters SqlCommandSqlParameter nesne oluşturabilirsiniz.SqlParameterCollection yöntemi, Add oluşturucu bağımsız değişkenlerini veya mevcut parametre nesnesini girdi olarak alır.

Bu konudaki sonraki bölümlerde tarih ve saat parametrelerinin nasıl belirtileceğini gösteren örnekler verilmiştir. Parametrelerle çalışmaya ilişkin ek örnekler için bkz . Parametreleri ve Parametre Veri Türlerini ve DataAdapter Parametrelerini Yapılandırma.

Tarih Örneği

Aşağıdaki kod parçası bir parametrenin nasıl belirtileceğini date gösterir.

SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@Date";
parameter.SqlDbType = SqlDbType.Date;
parameter.Value = "2007/12/1";
Dim parameter As New SqlParameter()
parameter.ParameterName = "@Date"
parameter.SqlDbType = SqlDbType.Date
parameter.Value = "2007/12/1"

Saat Örneği

Aşağıdaki kod parçası bir parametrenin nasıl belirtileceğini time gösterir.

SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@time";
parameter.SqlDbType = SqlDbType.Time;
parameter.Value = DateTime.Parse("23:59:59").TimeOfDay;
Dim parameter As New SqlParameter()
parameter.ParameterName = "@Time"
parameter.SqlDbType = SqlDbType.Time
parameter.Value = DateTime.Parse("23:59:59").TimeOfDay;

Datetime2 Örneği

Aşağıdaki kod parçası, hem tarih hem de saat bölümlerine sahip bir datetime2 parametrenin nasıl belirtileceğini gösterir.

SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@Datetime2";
parameter.SqlDbType = SqlDbType.DateTime2;
parameter.Value = DateTime.Parse("1666-09-02 1:00:00");
Dim parameter As New SqlParameter()
parameter.ParameterName = "@Datetime2"
parameter.SqlDbType = SqlDbType.DateTime2
parameter.Value = DateTime.Parse("1666-09-02 1:00:00");

DateTimeOffSet Örneği

Aşağıdaki kod parçası tarih, saat ve saat dilimi uzaklığı 0 olan bir parametrenin nasıl belirtileceğini DateTimeOffSet gösterir.

SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@DateTimeOffSet";
parameter.SqlDbType = SqlDbType.DateTimeOffSet;
parameter.Value = DateTimeOffset.Parse("1666-09-02 1:00:00+0");
Dim parameter As New SqlParameter()
parameter.ParameterName = "@DateTimeOffSet"
parameter.SqlDbType = SqlDbType.DateTimeOffSet
parameter.Value = DateTimeOffset.Parse("1666-09-02 1:00:00+0");

AddWithValue

Parametreleri, aşağıdaki kod parçasında AddWithValue gösterildiği gibi yöntemini SqlCommandkullanarak da sağlayabilirsiniz. Ancak, AddWithValue yöntemi parametresi için veya SqlDbType belirtmenize DbType izin vermez.

command.Parameters.AddWithValue(
    "@date", DateTimeOffset.Parse("16660902"));
command.Parameters.AddWithValue( _
    "@date", DateTimeOffset.Parse("16660902"))

@date parametresi sunucudaki bir date, datetimeveya datetime2 veri türüyle eşlenebilir. Yeni datetime veri türleriyle çalışırken, parametrenin SqlDbType özelliğini açıkça örneğin veri türüne ayarlamanız gerekir. Variant Parametre değerlerinin kullanılması veya örtük olarak kullanılması ve smalldatetime veri türleriyle geriye dönük uyumluluk sorunlarına datetime neden olabilir.

Aşağıdaki tabloda hangi SqlDbTypes CLR türlerinden çıkarıldığı gösterilmektedir:

CLR türü Inferred SqlDbType
DateTime SqlDbType.DateTime
TimeSpan SqlDbType.Time
DateTimeOffset SqlDbType.DateTimeOffset

Tarih ve Saat Verilerini Alma

Aşağıdaki tabloda, SQL Server 2008 tarih ve saat değerlerini almak için kullanılan yöntemler açıklanmaktadır.

SqlClient yöntemi Açıklama
GetDateTime Belirtilen sütun değerini yapı DateTime olarak alır.
GetDateTimeOffset Belirtilen sütun değerini yapı DateTimeOffset olarak alır.
GetProviderSpecificFieldType Alan için sağlayıcıya özgü temel alınan türü döndürür. Yeni tarih ve saat türleriyle GetFieldType aynı türleri döndürür.
GetProviderSpecificValue Belirtilen sütunun değerini alır. Yeni tarih ve saat türleriyle GetValue aynı türleri döndürür.
GetProviderSpecificValues Belirtilen dizideki değerleri alır.
GetSqlString Sütun değerini olarak SqlStringalır. InvalidCastException Veriler olarak ifade edilemediğinde bir SqlStringoluşur.
GetSqlValue Sütun verilerini varsayılan SqlDbTypeolarak alır. Yeni tarih ve saat türleriyle GetValue aynı türleri döndürür.
GetSqlValues Belirtilen dizideki değerleri alır.
GetString Tür Sistemi Sürümü SQL Server 2005 olarak ayarlandıysa sütun değerini dize olarak alır. InvalidCastException Veriler dize olarak ifade edilemediğinde bir oluşur.
GetTimeSpan Belirtilen sütun değerini yapı TimeSpan olarak alır.
GetValue Belirtilen sütun değerini temel alınan CLR türü olarak alır.
GetValues Dizideki sütun değerlerini alır.
GetSchemaTable Sonuç kümesinin meta verilerini açıklayan bir DataTable döndürür.

Not

Sql Server'da işlem sırasında yürütülen kod için yeni tarih ve saat SqlDbTypes desteklenmez. Bu türlerden biri sunucuya geçirilirse bir özel durum oluşturulur.

Tarih ve Saat Değerlerini Değişmez Değer Olarak Belirtme

Sql Server'ın çalışma zamanında değerlendirdiği ve iç tarih/saat yapılarına dönüştürdüğü çeşitli değişmez dize biçimleri kullanarak tarih ve saat veri türlerini belirtebilirsiniz. SQL Server, tek tırnak (') içine alınmış tarih ve saat verilerini tanır. Aşağıdaki örneklerde bazı biçimler gösterilmektedir:

  • gibi 'October 15, 2006'alfabetik tarih biçimleri.

  • Gibi '10/15/2006'sayısal tarih biçimleri.

  • ISO standart tarih biçimini kullanıyorsanız 15 Ekim 2006 olarak yorumlanacak, gibi '20061015'ayrılmamış dize biçimleri.

Sıfırdan küçük veya 24 saatten büyük veya buna eşit zaman değerleri bir ArgumentExceptionoluşturur.

SQL Server belgeleri kaynakları

SQL Server'da tarih ve saat değerleriyle çalışma hakkında daha fazla bilgi için aşağıdaki makalelere bakın.

Makale Açıklama
Tarih ve Saat Veri Türleri ve İşlevleri (Transact-SQL) Tüm Transact-SQL tarih ve saat veri türlerine ve işlevlerine genel bir bakış sağlar.
Tarih ve Saat Verilerini Kullanma Tarih ve saat veri türleri ve işlevleri hakkında bilgi ve bunları kullanma örnekleri sağlar.
Veri Türleri (Transact-SQL) SQL Server'daki sistem veri türlerini açıklar.

Ayrıca bkz.