Aracılığıyla paylaş


Veri türü desteği için ODBC tarih/saat geliştirmeleri

Bu konu, destekleyen bir ODBC türleri hakkında bilgi sağlar. SQL Server Tarih ve saat veri türü.

Parametreler ve Resultsets veri türü eşleştirme

ODBC veri türleri ek olarak (SQL_TYPE_TIMESTAMP ve SQL_TIMESTAMP), iki yeni veri türü gerekli SQL Server Yeni sunucu türlerini duyurmak için yerel istemci ODBC:

  • SQL_SS_TİME2

  • sql_timestampoffset

Aşağıdaki tablo tam sunucu türü eşlemesini gösterir.Fark bazı hücreler tablo iki girdisi içerir; 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_TİME2

-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 tabloda, ODBC C türleri ve karşılık gelen yapıları listeler.ODBC izin vermek için sürücü C türleri tanımlanmış, SQL_C_BINARY saat ve datetimeoffset ikili yapıları kullanılır.

SQL veri türü

Bellek yerleşimi

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_TİME2

SQL_SS_TİME2_STRUCT

sql_c_binary

sql_binary (-2)

sql_ss_timestampoffset

sql_ss_timestampoffset_struct

sql_c_binary

sql_binary (-2)

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

Veri biçimleri: Dizeler ve rakamları

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

SQL Server veri türü

ODBC veri türü

Istemci dönüştürmeleri için dize biçimi

Tarih saat

sql_type_timestamp

sql_timestamp

' yyyy-aa-gg ss: dd: SS [.999]'

SQL Server en çok üç kesirli ikinci sayı, tarih, saat için destekler.

Smalldatetime

sql_type_timestamp

sql_timestamp

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

Bu veri türü, bir dakikalık bir doğruluk vardır.Saniye bileşeni üzerinde sıfır çıktı ve sunucu tarafından girdi yuvarlanır.

Date

sql_type_date

sql_date

'yyyy-aa-gg'

Time

SQL_SS_TİME2

'ss: dd: SS [.9999999]'

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

Datetime2

sql_type_timestamp

sql_timestamp

' yyyy-aa-gg ss: dd: SS [0,9999999]'

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

DatetimeOFFSET

sql_ss_timestampoffset

' yyyy-aa-gg ss: dd: SS [.9999999] ss: dd +/-'

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

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

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

Uygulamalar için döndürülen dize her zaman belirli sütun aynı uzunlukta değerlerdir.Yıl, ay, gün, saat, dakika ve ikinci bileşenleri, önde gelen, en fazla genişliği sıfır ile sıfır ve tarih ve saat, tarih/saat değerleri arasında bir boşluk vardır.Ayrıca, saat ve datetimeoffset değeri mahsup timezone arasında bir boşluk vardır.Işareti timezone bir mahsup hesabı her zaman önce; uzaklık sıfır olduğunda, bu artı işaretidir (+).Kesirli saniye gerekiyorsa, en çok sütun için tanımlanmış olan duyarlık sıfır izleyen ile boşluklarla.Tarihzaman sütunlarını üç kesirli saniye basamak vardır.Smalldatetime sütunlar, hiçbir kesirli saniye basamak vardır ve saniyeyi her zaman sıfır olacak.

null bir dize geçerli bir tarih/saat hazır değil ve null değer göstermiyor.Boş bir dize, tarih/saat değerine dönüştürmek için bir girişimde SQLState 22018 hata ve "ınvalid character value for cast specification" iletisini neden olur.

Dönüştürme dizesi parametrelerinden dizelerinin aynı biçimde beklediğiniz, sıfır saat ve sıfır dakika ile bir timezone işaretini olabilen özel durumlar dışında artı veya eksi ve ardarda sıfırları en fazla 9 basamaklı kesirli saniye izin verilir.Bir saat bileşeni yok kesirli saniye basamak ondalık nokta ile sonlandırın.

Şimdilik, ek boşluk noktalama karakterleri geçici sürücü sağlar ve arasındaki uzaklık, saat ve timezone isteğe bağlıdır.Ancak, bu, gelecekteki bir sürümde değişebilir; uygulamaları geçerli davranışı üzerinde güvenmemelisiniz.

Veri biçimleri: Veri yapıları

Aşağıda açıklanan yapılarını ODBC Gregoryen takvime alınır aşağıdaki kısıtlamalar belirtir:

  • Ay aralık 1 ile 12.

  • Günlük alan aralık, 1 ay, gün sayısı ile ve yıl ve ay alanları ile artık yıllara ait hesap almak için tutarlı olmalıdır.

  • 0-23 Saat aralık.

  • 0 Ile 59 dakika aralık.

  • Saniye, 0 ile 61.9(n) aralıktır.Bu iki artık sideral saat eşitleme sağlamak saniye sağlar.

    Dikkat SQL Server ikinci bir değerler 59'dan büyük bir sunucu hatası neden olur; bu nedenle, artık saniye izin vermiyor.

Yeni'yi desteklemek için aşağıdaki varolan ODBC yapı için uygulamaları değiştirildi. SQL Server Tarih ve saat veri türü. Tanımlar, ancak değişmemiştir.

  • date_struct

  • time_struct

  • timestamp_struct

Iki yeni yapı vardır:

  • SQL_SS_TİME2_STRUCT

  • sql_ss_timestampoffset_struct

SQL_SS_TİME2_STRUCT

Bu yapı'de yenidir SQL Server 2008 ve hem 32-bit ve 64-bit işletim sistemlerinde 12 bayt için sıfır.

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

sql_ss_timestampoffset_struct

Bu yapı'de yenidir SQL Server 2008:

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 aralık -59 through +59.