odbc tarih/saat geliştirmeleri için veri türü desteği
Bu konu, destekleyen odbc türleri hakkında bilgi sağlar SQL ServerTarih ve Saat veri türlerini.
Veri türü eşleştirme parametreleri ve Resultsets
Ek odbc veri türleri eklenmiştir (SQL_TYPE_TIMESTAMP ve sql_tımestamp), iki yeni veri türleri SQL Serveryerel istemci yeni sunucu türlerini duyurmak için odbc:
SQL_SS_TIME2
SQL_TIMESTAMPOFFSET
Aşağıdaki tabloda, tam sunucu türü eşlemeyi gösterir. İki girişi içeren tablonun bazı hücreler dikkat edin; Bu durumda, ilk odbc 3.0 değerdir ve ikinci odbc 2.0 değerdir.
SQL Server veri türü |
veri türü. |
Değer |
---|---|---|
DateTime |
SQL_TYPE_TIMESTAMP SQL_TIMESTAMP |
93 (sql.h) 11 (sqlext.h) |
Smalldatetime |
SQL_TYPE_TIMESTAMP SQL_TIMESTAMP |
93 (sql.h) 11 (sqlext.h) |
Tarihi |
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 tabloda karşılık gelen yapıları ve odbc c türlerini listeler. odbc değil izin vermiyor çünkü sürücü c tipleri tanımlanmış, SQL_C_BINARY zaman ve datetimeoffset için ikili yapı kullanılır.
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_SS_TIME2 SQL_C_BINARY (odbc 3.5 ve öncesi) |
0x4000 (sqlncli.h) SQL_BINARY (-2) |
SQL_SS_TIMESTAMPOFFSET |
SQL_SS_TIMESTAMPOFFSET_STRUCT |
SQL_C_SS_TIMESTAMPOFFSET SQL_C_BINARY (odbc 3.5 ve öncesi) |
0x4001 (sqlncli.h) SQL_BINARY (-2) |
SQL_C_BINARY bağlama belirtildiğinde, hizalama denetimi gerçekleştirilecek ve hatalı hizalaması için bir hata bildirdi. Bu hata sqlstate IM016, ile belgili tanımlık haber "yanlış yapı hizalama" olacak.
Veri biçimleri: Dizeler ve rakamları
Aşağıdaki tablo arasındaki eşlemeleri gösterir SQL Serververi türleri, odbc veri türleri ve odbc dize hazır.
SQL Server veri türü |
veri türü. |
İstemci dönüştürmeleri dize biçimi |
---|---|---|
DateTime |
SQL_TYPE_TIMESTAMP SQL_TIMESTAMP |
'yyyy-AA-GG SS: [999]' SQL Serverüç kesirli ikinci basamak Datetime için destekler. |
Smalldatetime |
SQL_TYPE_TIMESTAMP SQL_TIMESTAMP |
'yyyy-aa-gg hh:hh:ss' Bu veri türü, bir dakika doğruluk vardır. Saniye bileşen üzerinde sıfır çıktı ve sunucu tarafından girişte yuvarlanır. |
Tarihi |
SQL_TYPE_DATE SQL_DATE |
'yyyy-aa-gg' |
Time |
SQL_SS_TIME2 |
'SS [.9999999]' Kesirli saniye isteğe bağlı olarak yedi basamaklı kullanılarak belirtilebilir. |
Datetime2 |
SQL_TYPE_TIMESTAMP SQL_TIMESTAMP |
'yyyy-AA-GG SS: [.9999999]' Kesirli saniye isteğe bağlı olarak yedi basamaklı kullanılarak belirtilebilir. |
DatetimeOFFSET |
SQL_SS_TIMESTAMPOFFSET |
'yyyy-AA-GG SS [.9999999] + SS: dd' Kesirli saniye isteğe bağlı olarak yedi basamaklı kullanılarak belirtilebilir. |
Tarih ve saat rakamları 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 değerleri her zaman belirli bir sütun için aynı uzunluğu vardır. Yıl, ay, gün, Saat, dakika ve ikinci bileşenleri kendi maksimum genişliği öndeki ile doldurulur ve Tarih ve Saat datetime değerleri arasında bir boşluk. Saat dilimimi datetimeoffset değer ofset arasında bir boşluk bulunmaktadır. Dilimimi uzaklık, bir işareti her zaman bulunabilir; uzaklık sıfır olduğunda, bu artı işaretidir (+). Kesirli saniye ile sondaki sıfırları gerekirse, sütun tanımlı duyarlık kadar doldurulur. DateTime sütunlar için üç Kesirli saniye basamak vardır. Smalldatetime sütunlar için orada 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ğerini göstermiyor. Bir tarih veya saat değeri boş bir dize dönüştürme girişimi hata SQLState 22018 ve "ınvalid character value for cast specification" iletisi neden olur.
Dize parametreleri dönüşümler dizeler aynı biçimde bekliyor olacak, bir dilimimi sıfır saat ve sıfır dakika işareti olabilir özel durumları ile artı veya eksi ve ardarda sıfırları maksimum 9 basamak Kesirli saniye için izin verilir. Saat bileşeni, ondalık noktası ve hiçbir Kesirli saniye basamak ile sonlandırabilirsiniz.
Şu anda, noktalama karakterleri etrafında ek boşluk sürücüsü sağlar ve zaman ve dilimimi uzaklığı arasındaki isteğe bağlıdır. Ancak, bu bir sürümde değişebilir; uygulamalar, mevcut davranış güvenmemelisiniz.
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, 1 ile 12 arasındaki aralıktır.
Gün alanı aralığı 1 ay gün sayısı üzerinden ve atılım yılı alarak yıl ve ay alanları ile tutarlı olmalıdır.
Saat aralığı 0 ile 23.
0 İle 59 dakika aralıktır.
Saniye, 0-61.9(n) arasındaki aralıktır. Bu iki sıçrama sideral time ile eşitleme sağlamak saniye verir.
Dikkat SQL Serverdeğil artık saniye izin vermek, yani 59 sunucu hatası neden olur daha büyük değerler ikinci.
Uygulamaları aşağıdaki varolan odbc yapılar için değiştirilmiş yeni destek SQL ServerTarih ve Saat veri türlerini. Tanımlar, ancak değişmiş değil.
DATE_STRUCT
TIME_STRUCT
TIMESTAMP_STRUCT
Ayrıca iki 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 eklenir.
typedef struct tagSS_TIME2_STRUCT {
SQLUSMALLINT hour;
SQLUSMALLINT minute;
SQLUSMALLINT second;
SQLUINTEGER fraction;
} SQL_SS_TIME2_STRUCT;
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;
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;
Eğer timezone_hournegatif timezone_minutenegatif olması gereken ya da sıfır. Eğer timezone_hourpozitif, timezone_minutepozitif olmalı ya da sıfır. Eğer timezone_hoursıfır, s timezone_minute -59 ile +59 aralığında herhangi bir değer olabilir.