Udostępnij za pośrednictwem


Obsługa typu danych ODBC Data/Godzina ulepszenia

Ten temat zawiera informacje o typach ODBC, które obsługują SQL Server data i czas danych typów.

Mapowanie typu danych parametrów i zestawy wyników

Typy oprócz ODBC (SQL_TYPE_TIMESTAMP i SQL_TIMESTAMP), dwa nowe dane są wymagane typy danych SQL Server macierzystego ODBC klienta do udostępnienia nowych typów serwera:

  • SQL_SS_TIME2

  • SQL_TIMESTAMPOFFSET

W poniższej tabela przedstawiono mapowanie kompletny typ serwera.Należy zauważyć, że niektóre komórki tabela zawiera dwa wpisy; w tych przypadkach wartość ODBC 3.0 jest pierwszym i drugim jest wartością ODBC 2.0.

Typ danych programu SQL Server

Typ danych SQL

Wartość

Datetime

SQL_TYPE_TIMESTAMP

SQL_TIMESTAMP

93 (sql.h)

11 (sqlext.h)

Smalldatetime

SQL_TYPE_TIMESTAMP

SQL_TIMESTAMP

93 (sql.h)

11 (sqlext.h)

Data

SQL_TYPE_DATE

SQL_DATE

91 (sql.h)

9 (sqlext.h)

Godzina

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)

W poniższej tabela przedstawiono odpowiednich struktur i typy ODBC C.Ponieważ ODBC nie zezwalają na c typy zdefiniowane przez sterownik, SQL_C_BINARY jest używana do czas i dataczasprzesunięcia jako binarne struktur.

Typ danych SQL

Układ pamięci

Domyślny typ danych c

Wartość (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

SQL_BINARY-(2)

SQL_SS_TIMESTAMPOFFSET

SQL_SS_TIMESTAMPOFFSET_STRUCT

SQL_C_BINARY

SQL_BINARY-(2)

Po określeniu powiązanie SQL_C_BINARY wyrównanie będzie sprawdzany i zgłosił błąd wyrównania niepoprawne.SQLSTATE dla tego błędu będzie IM016, z komunikatem "Niepoprawna struktura wyrównanie".

Formaty danych: Ciągi i literałów

W poniższej tabela przedstawiono mapowania między SQL Server typów danych i typy danych ODBC, Literały ciąg ODBC.

Typ danych programu SQL Server

Typ danych ODBC

Format ciągu dla konwersji klient

Datetime

SQL_TYPE_TIMESTAMP

SQL_TIMESTAMP

"rrrr mm-dd ss [.999]"

SQL Serverobsługuje maksymalnie trzy cyfry drugiego ułamkowe Datetime.

Smalldatetime

SQL_TYPE_TIMESTAMP

SQL_TIMESTAMP

"rrrr mm-dd hh:hh:ss"

Ten typ danych ma dokładność jedną minutę.Składnik sekund będzie zero w danych wyjściowych i zaokrąglone na wejście przez serwer.

Data

SQL_TYPE_DATE

SQL_DATE

"rrrr mm-dd"

Godzina

SQL_SS_TIME2

"ss [.9999999]"

Opcjonalnie można określić ułamków sekund do siedmiu cyfry.

Datetime2

SQL_TYPE_TIMESTAMP

SQL_TIMESTAMP

"rrrr mm-dd ss [0,9999999]"

Opcjonalnie można określić ułamków sekund do siedmiu cyfry.

DatetimeOFFSET

SQL_SS_TIMESTAMPOFFSET

"rrrr mm-dd: ss [.9999999] +/-gg: mm"

Opcjonalnie można określić ułamków sekund do siedmiu cyfry.

Żadne zmiany nie zostały do sekwencji unikowych ODBC Data /czas literałów.

Ułamków sekund w wyniki kropka (.), należy zawsze używać zamiast dwukropka (:)).

Ciąg wartości zwracanych do aplikacji są zawsze tej samej długości, dla danej kolumna.Roku, miesiąc, dzień, czas, minutę i drugiej części są wypełniane zer ich maksymalną szerokość i jednego miejsca między data i godziną wartości datetime.Istnieje również jedną spację między czas i strefa czasowa przesunięcie w wartości datetimeoffset.Przesunięcie timezone jest zawsze poprzedzone znakiem; Przesunięcie wynosi zero, to znak jest znakiem plus (+).Końcowe zera w razie potrzeby do określonych precyzji kolumna są wypełniane ułamków sekund.Istnieją trzy cyfry ułamków sekund dla kolumn typu Data/Godzina.Smalldatetime kolumn są nie ułamków sekund cyfry i sekund będzie zawsze równa zero.

Pusty ciąg nie jest prawidłową data/czas literał i nie reprezentuje wartość NULL.Próba przekonwertować pusty ciąg na datę /czas wartość spowoduje błąd SQLState 22018 i komunikat "nieprawidłowy znak wartość dla specyfikacji".

Konwersje z parametry ciąg będzie poszukiwać ciągi w tym samym formacie, z wyjątkami, które mogą być znak timezone godzinach zero i zero minut plus lub minus i końcowe zera są dozwolone dla ułamków sekund maksymalnie 9 cyfr.A czas składnika można zakończyć z punktem dziesiętnym i nie cyfr ułamków sekund.

Obecnie, sterownik pozwala dodatkowy odstęp wokół znaków interpunkcyjnych i odstęp między czas i czasprzesunięcie strefy jest opcjonalne.Jednakże może to zmienić w przyszłości; aplikacje nie powinny polegać na bieżące zachowanie.

Formaty danych: Struktury danych

ODBC określa następujące ograniczenia, które są pobierane z kalendarza gregoriańskiego struktur opisanych poniżej:

  • Miesiąc zakres wynosi od 1 do 12.

  • Dzień zakres wynosi od 1 do liczby dni w miesiącu i muszą być zgodne z pole rok i miesiąc, biorąc pod uwagę przestępnego.

  • Godzinę zakres wynosi od 0 do 23.

  • MINUTE zakres wynosi od 0 do 59.

  • Sekund zakres wynosi od 0 do 61.9(n).Dzięki temu do dwóch sekund przestępnych zachować synchronizację z czas sideral.

    Należy zauważyć, że SQL Server nie zezwala na przestępnych sekund, więc drugiej wartości większe od 59 będzie powodować błąd serwera.

Implementacje dla następujących istniejących strukturach ODBC zostały zmodyfikowane do obsługi nowych SQL Server data i czas danych typów.Definicje, jednak nie uległy zmianie.

  • DATE_STRUCT

  • TIME_STRUCT

  • TIMESTAMP_STRUCT

Istnieją także dwa nowe struktur:

  • SQL_SS_TIME2_STRUCT

  • SQL_SS_TIMESTAMPOFFSET_STRUCT

SQL_SS_TIME2_STRUCT

Ta struktura jest uzupełniony 12 bajtów w 32-bitowych i 64-bitowych systemach operacyjnych.

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;

Jeśli timezone_hour jest ujemna, timezone_minute musi być ujemna lub zero.Jeśli timezone_hour jest dodatnia, timezone_minute musi być dodatnią lub zero.Jeśli timezone_hour wynosi zero, to stimezone_minute może mieć dowolną wartość z zakres od -59 do + 59.

Zobacz także

Koncepcje