Share via


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.

Ayrıca bkz.

Kavramlar

Tarih/Saat (odbc) geliştirmeleri