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.