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 , , time
datetime2
veya datetimeoffset
öğesine date
dö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.Date
ayarlayamazsı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 , Time
ve 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 , DateTime2 ve DateTimeOffset iç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
, datetime
veya 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 SqlString oluşur. |
GetSqlValue | Sütun verilerini varsayılan SqlDbType olarak 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. |