Преобразования (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-автоматизация. Однако, поскольку 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 для SQL Server следует тому же поведению, что и собственный клиент SQL Server. Это означает, что некоторые преобразования в 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.