Поделиться через


Преобразования собственных клиентов SQL Server (OLE DB)

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)

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

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

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

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

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

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

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

    гггг-мм-дд

Примечание.

Более ранние версии собственного клиента SQL Server и SQLOLEDB реализовали преобразования OLE в случае сбоя стандартных преобразований. В результате некоторые преобразования, выполняемые машинным клиентом SQL Server 10.0 и более поздними версиями, отличаются от спецификации OLE DB.

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

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