Преобразования (OLE DB)

Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)

Скачать драйвер OLE DB

В этой статье описано, как выполнять преобразование между значениями типа datetime и datetimeoffset. Преобразования, описанные в этом разделе, либо уже предоставлены OLE DB, либо являются согласованным расширением OLE DB.

Формат литералов и строк для дат и времени в OLE DB обычно соответствует ISO и не зависит от локали, установленной на клиенте. Единственное исключение — DBTYPE_DATE, для которого стандартом является OLE-автоматизация. Однако, поскольку OLE DB Driver for SQL Server проводит преобразования типов только при передаче данных с клиента или на клиент, приложение никак не может обязать OLE DB Driver for SQL Server преобразовывать тип DBTYPE_DATE в строковые форматы или обратно. Во всех остальных случаях строки используют следующие форматы (скобками отмечены необязательные элементы).

  • Строки DateTime и DateTimeOffset имеют следующий формат:

    ГГГГ-ММ-ДД[ чч:мм:сс[.9999999][ ± чч:мм]]

  • Формат строк типа time:

    чч:мм:сс[.9999999]

  • Строка date имеет такой формат:

    гггг-мм-дд

Примечание

Предыдущие версии собственного клиента SQL Server и SQLOLEDB реализовали преобразования OLE в случаях, когда стандартные преобразования возвращали ошибку. OLE DB Driver for SQL Server демонстрирует такое же поведение, как и SQL Server Native Client. Это означает, что некоторые преобразования в OLE DB Driver for SQL Server отличаются от спецификации OLE DB.

Преобразования из строк обеспечивают гибкость в отношении пробелов и ширины полей. Дополнительные сведения см. в разделе "Форматы данных: строки и литералы" статьи Улучшения поддержки типов данных даты и времени OLE DB.

Далее приведены общие правила преобразования.

  • При преобразовании строки в тип данных даты-времени строка сначала проходит синтаксический анализ как литерал ISO. Если анализ завершился неудачей, строка проходит синтаксический анализ как литерал даты OLE, содержащий компонент времени.

  • Если время отсутствует, но получатель способен его хранить, оно устанавливается в нулевое значение. Если дата отсутствует, но принимающий объект может хранить дату, этой дате присваивается значение сегодняшней даты при использовании преобразования ISO и 30 декабря 1899 года при использовании преобразования OLE.

  • Если клиент использует тип даты, в котором не указан часовой пояс, но сервер может хранить информацию о часовом поясе, предполагается, что данные клиента используют часовой пояс клиента.

  • Если клиент содержит информацию о часовом поясе, но на сервере данных часового пояса нет, предполагается, что часовой пояс задан в формате UTC. Это отличается от поведения сервера.

  • Если время присутствует, но получатель не способен его хранить, компонент времени пропускается.

  • Если дата присутствует, но получатель не способен ее хранить, компонент даты пропускается.

  • Если при преобразовании с клиента на сервер происходит усечение секунд или долей секунд, возвращается значение DB_E_ERRORSOCCURRED и устанавливается состояние DBSTATUS_E_DATAOVERFLOW.

  • Если усечение секунд или долей секунд происходит при преобразовании с клиента на сервер, устанавливается состояние DBSTATUS_S_TRUNCATED.

в этом разделе

Преобразования, выполняемые при передаче от клиента к серверу
Описывает преобразования даты и времени, выполняемые между клиентским приложением, написанным с помощью OLE DB Driver for SQL Server 2008 (10.0.x) и более поздних версий.

Преобразования, выполняемые при передаче от сервера к клиенту
Описывает преобразования даты и времени, выполненные между SQL Server 2008 (10.0.x) и более поздними версиями, а также клиентское приложение, написанное с помощью OLE DB Driver for SQL Server.

См. также:

Улучшения функций даты и времени (OLE DB)