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.