Aracılığıyla paylaş


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 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.Date

  • SqlDbType.Time

  • SqlDbType.DateTime2

  • SqlDbType.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.

Ayrıca bkz.