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.
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 saniye hassasiyetini destekler ve depolama boyutu, belirtilen hassasiyete göre 3 ila 6 bayt arasında değişir. |
datetime2 |
datetime2 veri türü, date ve time veri türlerinin aralığını ve hassasiyetini tek bir veri türünde birleştirir.Varsayılan değerler ve dize değişmez değerleri, date ve time veri türlerinde 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. HH, saat dilimi farkındaki saat sayısını temsil eden 00 ile 14 arasında 2 rakamdı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 değerlerini MDY, DMY, YMD, YDM, MYD veya DYM sırasına göre sıralayarak netleştirmek için bir 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 iki basamaklı yıl kesme seçeneği'ne bakın.
Not
Gün/Ay/Yıl tarih biçimi, bir dize biçiminden date, time, datetime2, veya datetimeoffset öğesine dönüştürme işlemi sırasında 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.DateSqlDbType.TimeSqlDbType.DateTime2SqlDbType.DateTimeOffSet
Önceden tanımlanan SqlDbType numaralandırmalarından birini kullanarak bir SqlParameter'nin veri türünü belirtebilirsiniz.
Not
SqlParameter öğesinin DbType özelliğini SqlDbType.Date olarak ayarlayamazsınız.
Ayrıca, bir SqlParameter nesnesinin DbType özelliğini belirli bir DbType sabit listesi değerine ayarlayarak SqlParameter türünü genel olarak belirtebilirsiniz.
DbType'ye, datetime2 ve datetimeoffset veri türlerini desteklemek için aşağıdaki 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 tarih ve saat veri türlerini desteklemek için hiçbir yeni System.Data.SqlTypes veri türü tanıtı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 | Sistem.TarihSaat | Tarih | Tarih |
| Zaman | System.ZamanAralığı | Zaman | Zaman |
| datetime2 | Sistem.TarihSaat | DateTime2 | DateTime2 |
| Datetimeoffset (tarih ve zaman belirteci) | System.DateTimeOffset | TarihSaatÖtelemesi | TarihSaatÖtelemesi |
| tarih/zaman | Sistem.TarihSaat | Tarih ve Saat | Tarih ve Saat |
| smalldatetime | Sistem.TarihSaat | Tarih ve Saat | Tarih ve Saat |
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, (DBNull Visual Basic'te) yerine null belirtmelisinizNothing. 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 göz ardı edilir. |
| Scale | Değerin zaman kısmının çözümlemesinin, Time, DateTime2 ve DateTimeOffset için ondalık basamak sayıları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 göz ardı edilir. |
| 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 ya da buna eşit zaman değerleri bir ArgumentException oluşturur.
Parametre Oluşturma
Oluşturucusunu kullanarak bir SqlParameter nesnesi oluşturabilir veya SqlParameterCollection yöntemini çağırarak onu bir SqlCommandParameters koleksiyonuna ekleyebilirsiniz. Bu yöntem, Add oluşturucu bağımsız değişkenlerini veya mevcut parametre nesnesini girdi olarak alacaktı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, SqlCommand'in AddWithValue yöntemi kullanarak, aşağıdaki kod parçasında gösterildiği gibi sağlayabilirsiniz. Ancak, AddWithValue yöntemi, parametre için DbType veya SqlDbType belirtmenize 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 veya parametre değerlerinin örtük olarak belirlenmesi, datetime ve smalldatetime veri türleriyle geriye dönük uyumluluk sorunlarına neden olabilir.
Hangi SqlDbTypes'lerin hangi CLR türlerinden çıkarıldığı aşağıdaki tabloda gösterilmektedir.
| CLR türü | Inferred SqlDbType |
|---|---|
| Tarih ve Saat | SqlDbType.DateTime |
| Zaman Aralığı | SqlDbType.Time |
| TarihSaatÖtelemesi | 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 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 |
SqlString türünde sütun değerini alır.
InvalidCastException Veriler olarak ifade edilemediğinde bir SqlStringoluşur. |
| GetSqlValue | Varsayılan SqlDbType olarak sütun verilerini 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 ortaya çıkar. |
| GetTimeSpan | Belirtilen sütun değerini yapı TimeSpan olarak alır. |
| GetValue | Belirtilen sütun değerini temeldeki 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 Sabit Olarak Belirtme
Tarih ve saat veri türlerini, 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çimlerini kullanarak 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:
Alfabetik tarih biçimleri, örneğin
'October 15, 2006'.Gibi
'10/15/2006'sayısal tarih biçimleri.ISO standart tarih biçimini kullanıyorsanız, 15 Ekim 2006 olarak yorumlanacak
'20061015'gibi ayrılmamış dize biçimleri.
Sıfırdan küçük veya 24 saat veya daha büyük olan zaman değerleri bir ArgumentException hatası verir.
SQL Server doküman 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. |