Aracılığıyla paylaş


odbc tarih/saat geliştirmeleri için veri türü desteği

Bu konuda destekleyen odbc türleri hakkında bilgi sağlar SQL Server Tarih ve saat veri türleri.

Veri türü eşleştirme parametreleri ve Resultsets

Ek olarak odbc veri türleri içinde gerekli (SQL_TYPE_TIMESTAMP ve SQL_TIMESTAMP), iki yeni veri türleri SQL Server Yeni sunucu türlerini göstermek için yerel istemci odbc:

  • SQL_SS_TIME2

  • SQL_TIMESTAMPOFFSET

Aşağıdaki tablo tam sunucu türü eşleme gösterir.Bazı tablo hücreleri iki girdilerini içeren dikkat edin; Bu durumda, ilk odbc 3.0 değerdir ve ikinci odbc 2.0 değerdir.

sql Server veri türü

sql veri türü

Değer

Tarih saat

SQL_TYPE_TIMESTAMP

SQL_TIMESTAMP

93 (sql.h)

11 (sqlext.h)

Smalldatetime

SQL_TYPE_TIMESTAMP

SQL_TIMESTAMP

93 (sql.h)

11 (sqlext.h)

Date

SQL_TYPE_DATE

SQL_DATE

91 (sql.h)

9 (sqlext.h)

Time

SQL_SS_TIME2

-154 (SQLNCLI.h)

DatetimeOFFSET

SQL_SS_TIMESTAMPOFFSET

-155 (SQLNCLI.h)

Datetime2

SQL_TYPE_TIMESTAMP

SQL_TIMESTAMP

93 (sql.h)

11 (sqlext.h)

Aşağıdaki tablo karşılık gelen yapıları ve odbc c türlerini listeler.odbc izin vermiyor çünkü sürücü c türleri tanımlanmış, SQL_C_BINARY saat ve datetimeoffset için ikili yapıları kullanılır.

sql veri türü

Bellek düzeni

Varsayılan c veri türü

Değer (sqlext.h)

SQL_TYPE_TIMESTAMP

SQL_TIMESTAMP

SQL_TIMESTAMP_STRUCT

TIMESTAMP_STRUCT

SQL_C_TYPE_TIMESTAMP

SQL_C_TIMESTAMP

SQL_TYPE_TIMESTAMP

SQL_TIMESTAMP

SQL_TYPE_DATE

SQL_DATE

SQL_DATE_STRUCT

DATE_STRUCT

SQL_C_TYPE_DATE

SQL_C_DATE

SQL_TYPE_DATE

SQL_DATE

SQL_SS_TIME2

SQL_SS_TIME2_STRUCT

SQL_C_BINARY

UZUN SQL_BINARY (-2)

SQL_SS_TIMESTAMPOFFSET

SQL_SS_TIMESTAMPOFFSET_STRUCT

SQL_C_BINARY

UZUN SQL_BINARY (-2)

SQL_C_BINARY bağlama belirtildiğinde hizalama denetimi gerçekleştirilmez ve hatalı hizalaması için bir hata bildirdi.Bu hata sqlstate IM016, "yanlış yapı hizalama" iletisiyle olacaktır.

Veri biçimleri: Dizeler ve rakamları

Aşağıdaki tablo arasındaki eşlemeleri gösterir SQL Server veri türleri, odbc veri türleri ve odbc dize hazır bilgi.

sql Server veri türü

odbc veri türü

istemci dönüştürmeleri dize biçimi

Tarih saat

SQL_TYPE_TIMESTAMP

SQL_TIMESTAMP

: ' yyyy-mm-dd: ss [.999]'

SQL Serveren çok üç kesirli ikinci basamak Datetime için destekler.

Smalldatetime

SQL_TYPE_TIMESTAMP

SQL_TIMESTAMP

'yyyy-aa-gg hh:hh:ss'

Bu veri türü bir dakikalık bir hassasiyeti vardır.Saniye bileşeni üzerinde sıfır çıktı ve sunucu tarafından girişte yuvarlanır.

Date

SQL_TYPE_DATE

SQL_DATE

'yyyy-aa-gg'

Time

SQL_SS_TIME2

':: ss [.9999999]'

Kesirli saniye isteğe bağlı olarak en fazla yedi basamaklı kullanılarak belirtilebilir.

Datetime2

SQL_TYPE_TIMESTAMP

SQL_TIMESTAMP

: ' yyyy-mm-dd: ss [0,9999999]'

Kesirli saniye isteğe bağlı olarak en fazla yedi basamaklı kullanılarak belirtilebilir.

DatetimeOFFSET

SQL_SS_TIMESTAMPOFFSET

: ' yyyy-mm-dd: ss [.9999999] +/-ss: dd'

Kesirli saniye isteğe bağlı olarak en fazla yedi basamaklı kullanılarak belirtilebilir.

Tarih/saat rakamları için odbc çıkış sıralarını herhangi bir değişiklik vardır.

Her zaman Kesirli saniye sonuçlar içinde iki nokta (:). yerine nokta (.) kullanın

Uygulamalar için döndürülen dize her zaman belirli bir sütun için aynı uzunlukta değerlerdir.Yıl, ay, gün, saat, dakika ve ikinci bileşenleri en büyük genişliklerini önlerine ile doldurulur ve tarih ve saat datetime değerleri arasında bir boşluk vardır.Saat ve saat dilimi uzaklığı datetimeoffset değer arasında bir boşluk vardır.Saat dilimi uzaklığı her zaman bir işareti koyarak; Uzaklık sıfır olduğunda, bu artı işaretidir (+).Kesirli saniye ile sondaki sıfırlar gerekirse, sütun için tanımlı duyarlık kadar doldurulur.DateTime sütunlar için üç Kesirli saniye basamak vardır.Smalldatetime sütunlar için vardır hiçbir Kesirli saniye basamak ve saniye her zaman sıfır olacak.

Boş bir dize geçerli bir tarih/saat hazır değil ve null değeri temsil etmiyor.Bir tarih/saat değeri boş bir dize dönüştürmek denemesi hata SQLState 22018 ve "Invalid character value for cast specification" iletisi neden olur.

Dize parametreleri türünden dizeler aynı biçimde beklediğiniz, sıfır saat ve sıfır dakika ile bir saat dilimi belirtisi olabilen durumlarla artı veya eksi ve ardarda sıfırları en fazla 9 basamak Kesirli saniye için izin verilir.Saat bileşeni bir ondalık noktası ve hiç Kesirli saniye basamak ile sonlandırabilir.

Şu anda, sürücü noktalama karakterleri etrafında ek boşluk sağlar ve saat ve saat dilimi uzaklığı arasındaki boşluğu isteğe bağlıdır.Ancak, bu bir sonraki sürümde değişebilir; uygulamaları geçerli davranış olarak yararlanmalıdır.

Veri biçimleri: Veri yapıları

Aşağıda açıklanan yapılarını odbc Gregoryen takvimden çekilen aşağıdaki kısıtlamaları belirtir:

  • Ay aralık 1 ile 12'dir.

  • Gün alan aralık 1 ay gün sayısı üzerinden ve yıl ve ay alanları ile artık yıl hesap alma tutarlı olması gerekir.

  • Saat aralık 0 ile 23 arasında.

  • Dakikada aralık 0 ile 59 arasında olur.

  • Saniye aralık üzerinden 61.9(n) 0'dır.Bu eşitleme sideral saat ile korumak en fazla iki artık saniye verir.

    Dikkat SQL Server izin vermez artık saniye, böylece ikinci değerler 59'dan büyük neden olacak bir sunucu hatası.

Uygulamaları aşağıdaki varolan odbc yapılar için yeni desteklemek üzere değiştirilmiş olabilir SQL Server Tarih ve saat veri türleri.Tanımlar, ancak değişmemiştir.

  • DATE_STRUCT

  • TIME_STRUCT

  • TIMESTAMP_STRUCT

İki yeni yapılar vardır:

  • SQL_SS_TIME2_STRUCT

  • SQL_SS_TIMESTAMPOFFSET_STRUCT

SQL_SS_TIME2_STRUCT

Bu yapı, hem 32 bit hem de 64-bit işletim sistemlerinde 12 bayt sıfır eklenir.

typedef struct tagSS_TIME2_STRUCT {
   SQLUSMALLINT hour;
   SQLUSMALLINT minute;
   SQLUSMALLINT second;
   SQLUINTEGER fraction;
} SQL_SS_TIME2_STRUCT;

SQL_SS_TIMESTAMPOFFSET_STRUCT

typedef struct tagSS_TIMESTAMPOFFSET_STRUCT {
   SQLSMALLINT year;
   SQLUSMALLINT month;
   SQLUSMALLINT day;
   SQLUSMALLINT hour;
   SQLUSMALLINT minute;
   SQLUSMALLINT second;
   SQLUINTEGER fraction;
   SQLSMALLINT timezone_hour;
   SQLSMALLINT timezone_minute;
} SQL_SS_TIMESTAMPOFFSET_STRUCT;

If the timezone_hour is negative, the timezone_minute must be negative or zero.If the timezone_hour is positive, the timezone_minute must be positive or zero.If the timezone_hour is zero, the stimezone_minute may have any value in the range -59 through +59.

Ayrıca bkz.

Kavramlar