Преобразования собственных клиентов 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.