Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy do:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
System Platform Analitycznych (PDW)
Baza danych SQL w Microsoft Fabric
Ten artykuł opisuje konwersje daty i czasu wykonywane pomiędzy SQL Server 2008 (10.0.x) a nowszymi wersjami oraz aplikacją kliencką napisaną za pomocą sterownika OLE DB dla SQL Server.
Conversions
Poniższa tabela opisuje konwersje między typem zwróconym klientowi a typem w wiązaniu. Jeśli parametry wyjściowe ICommandWithParameters::SetParameterInfo zostały wywołane, a typ określony w pwszDataSourceType nie odpowiada rzeczywistemu typowi na serwerze, serwer wykona niejawną konwersję, a typ zwrócony klientowi będzie odpowiadał typowi określonemu przez ICommandWithParameters::SetParameterInfo. Może to prowadzić do nieoczekiwanych wyników konwersji, gdy zasady konwersji serwera różnią się od tych opisanych w tym artykule. Na przykład, gdy trzeba podać domyślną datę, SQL Server używa 1900-1-1 zamiast 1899-12-30.
| Do-> Źródło |
DATE | DBDATE | DBTIME | DBTIME2 | Znacznik DBTIMESTAMP | DBTIMESTAMPOFFSET | FILETIME | BAJTÓW | VARIANT | SSVARIANT | BSTR | STR | WSTR |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Date | 1, 7 | OK | - | - | 1 | 1, 3 | 1, 7 | - | OK (VT_BSTR) | OK | OK | 4 | 4 |
| Time | 5, 6, 7 | - | 9 | OK | 6 | 3, 6 | 5, 6 | - | OK (VT_BSTR) | OK | OK | 4 | 4 |
| Smalldatetime | 7 | 8 | 9, 10 | 10 | OK | 3 | 7 | - | 7 (VT_DATE) | OK | OK | 4 | 4 |
| Data i czas | 5, 7 | 8 | 9, 10 | 10 | OK | 3 | 7 | - | 7 (VT_DATE) | OK | OK | 4 | 4 |
| Datetime2 | 5, 7 | 8 | 9, 10 | 10 | 7 | 3 | 5, 7 | - | OK (VT_BSTR) | OK | OK | 4 | 4 |
| Datetimeoffset | 5, 7, 11 | 8, 11 | 9, 10, 11 | 10, 11 | 7, 11 | OK | 5, 7, 11 | - | OK (VT_BSTR) | OK | OK | 4 | 4 |
| Char, Varchar, Nchar, Nvarchar |
7, 13 | 12 | 12, 9 | 12 | 12 | 12 | 7, 13 | N/A | N/A | N/A | N/A | N/A | N/A |
| Sql_variant (datetime) |
7 | 8 | 9, 10 | 10 | OK | 3 | 7 | - | 7(VT_DATE) | OK | OK | 4 | 4 |
| Sql_variant (krótka randka) |
7 | 8 | 9, 10 | 10 | OK | 3 | 7 | - | 7(VT_DATE) | OK | OK | 4 | 4 |
| Sql_variant (randka) |
1, 7 | OK | 2 | 2 | 1 | 1, 3 | 1, 7 | - | OK(VT_BSTR) | OK | OK | 4 | 4 |
| Sql_variant (czas) |
5, 6, 7 | 2 | 6 | OK | 6 | 3, 6 | 5, 6 | - | OK(VT_BSTR) | OK | OK | 4 | 4 |
| Sql_variant (datetime2) |
5, 7 | 8 | 9, 10 | 10 | OK | 3 | 5, 7 | - | OK(VT_BSTR) | OK | OK | 4 | 4 |
| Sql_variant (przesunięcie daty i czasu) |
5, 7, 11 | 8, 11 | 9, 10, 11 | 10, 11 | 7, 11 | OK | 5, 7, 11 | - | OK(VT_BSTR) | OK | OK | 4 | 4 |
Klucz do symboli
| Symbol | Meaning |
|---|---|
| OK | Konwersja nie jest konieczna. |
| - | Nie jest obsługiwana konwersja. Jeśli powiązanie zostanie zweryfikowane podczas wywołania IAccessor::CreateAccessor, DBBINDSTATUS_UPSUPPORTEDCONVERSION zwracane jest w rgStatus. Gdy walidacja akwaratorów jest odroczona, DBSTATUS_E_BADACCESSOR jest ustalana. |
| 1 | Pola czasowe są ustawione na zero. |
| 2 | DBSTATUS_E_CANTCONVERTVALUE jest ustalone. |
| 3 | Strefa czasowa jest ustawiona na zero. |
| 4 | Jeśli bufor klienta nie jest wystarczająco duży, DBSTATUS_S_TRUNCATED jest ustawiony. Gdy typ serwera zawiera ułamki sekund, liczba cyfr w ciągu wynikowym dokładnie odpowiada skali typu serwera. |
| 5 | Obcięcie sekund lub ułamków sekund jest ignorowane. |
| 6 | Data jest ustalana na bieżącą, chyba że źródło jest literalnym łańcuchem czasowym, a miejsce docelowe to DBTYPE_DATE. W tym przypadku używa się 1899-12-30. |
| 7 | Jeśli wartość się przepełni, DBSTATUS_E_DATAOVERFLOW jest ustalana. |
| 8 | Pola czasowe są ignorowane. |
| 9 | Pola ułamkowe sekundy są ignorowane. |
| 10 | Komponent daty jest pomijany. |
| 11 | Czas jest przeliczany na strefę czasową klienta. Jeśli podczas tej konwersji wystąpi błąd, DBSTATUS_E_DATAOVERFLOW jest ustalany. |
| 12 | Ciąg jest analizowany jako literal ISO i konwertowany na typ docelowy. Jeśli to się nie powiedzie, ciąg jest analizowany jako literal daty OLE (który również zawiera składowe czasowe) i konwertowany z daty OLE (DBTYPE_DATE) na typ docelowy. Ciąg musi odpowiadać składni literałem docelowego typu umożliwiającego poprawę parsowania formatu ISO. Aby parsowanie OLE zakończyło się sukcesem, ciąg musi być zgodny ze składnią rozpoznawaną przez OLE. Jeśli ciąg nie może być parsowany, DBSTATUS_E_CANTCONVERTVALUE jest ustawione. Jeśli wartości komponentów są poza zakresem, DBSTATUS_E_DATAOVERFLOW jest ustalane. |
| 13 | Ciąg jest analizowany jako literal ISO i konwertowany na typ docelowy. Jeśli to się nie powiedzie, ciąg jest analizowany jako literal daty OLE (który również zawiera składowe czasowe) i konwertowany z daty OLE (DBTYPE_DATE) na typ docelowy. Ciąg musi być zgodny ze składnią literali datetime, chyba że celem jest DBTYPE_DATE lub DBTYPE_DBTIMESTAMP. W takim przypadku dopuszczalny jest literal datetime lub time, aby parsowanie formatu ISO mogło się powiodować. Aby parsowanie OLE zakończyło się sukcesem, ciąg musi być zgodny ze składnią rozpoznawaną przez OLE. Jeśli ciąg nie może być parsowany, DBSTATUS_E_CANTCONVERTVALUE jest ustawione. Jeśli wartości komponentów są poza zakresem, DBSTATUS_E_DATAOVERFLOW jest ustalane. |