Привязки и преобразования (OLE DB)
В этом разделе описано преобразование между типами datetime
и datetimeoffset
. Преобразования, описанные в этом разделе, либо уже предоставлены OLE DB, либо являются согласованным расширением OLE DB.
Формат литералов и строк для дат и времени в OLE DB обычно соответствует ISO и не зависит от локали, установленной на клиенте. Единственное исключение — DBTYPE_DATE, для которого стандартом является OLE-автоматизация. Тем не менее, поскольку SQL Server Native Client преобразуется между типами только при передаче данных в клиент или из клиента, приложение не может принудительно преобразовать SQL Server Native Client между форматами DBTYPE_DATE и строк. Во всех остальных случаях строки используют следующие форматы (скобками отмечены необязательные элементы).
Формат строк
datetime
иdatetimeoffset
:Гггг-Мм-dd[ чч:мм:сс[.9999999][ ?? чч:мм]]
Формат строк
time
:чч:мм:сс[.9999999]
Формат строк
date
:гггг-мм-дд
Примечание
Предыдущие версии собственного клиента SQL Server и SQLOLEDB реализовали преобразования OLE в случаях, когда стандартные преобразования возвращали ошибку. В результате некоторые преобразования, выполняемые SQL Server Native Client 10.0 и более поздних версий, отличаются от спецификации OLE DB.
Преобразования из строк обеспечивают гибкость в отношении пробелов и ширины полей. Дополнительные сведения см. в разделе "Форматы данных: строки и литералы" статьи Улучшения поддержки типов данных даты и времени OLE DB.
Далее приведены общие правила преобразования.
При преобразовании строки в тип данных даты-времени строка сначала проходит синтаксический анализ как литерал ISO. Если анализ завершился неудачей, строка проходит синтаксический анализ как литерал даты OLE, содержащий компонент времени.
Если время отсутствует, но получатель способен его хранить, оно устанавливается в нулевое значение. Если дата отсутствует, но принимающий объект может хранить дату, этой дате присваивается значение сегодняшней даты при использовании преобразования ISO и 30 декабря 1899 года при использовании преобразования OLE.
Если клиент использует тип даты, в котором не указан часовой пояс, но сервер может хранить информацию о часовом поясе, предполагается, что данные клиента используют часовой пояс клиента.
Если клиент содержит информацию о часовом поясе, но на сервере данных часового пояса нет, предполагается, что часовой пояс задан в формате UTC. Это отличается от поведения сервера.
Если время присутствует, но получатель не способен его хранить, компонент времени пропускается.
Если дата присутствует, но получатель не способен ее хранить, компонент даты пропускается.
Если при преобразовании с клиента на сервер происходит усечение секунд или долей секунд, возвращается значение DB_E_ERRORSOCCURRED и устанавливается состояние DBSTATUS_E_DATAOVERFLOW.
Если усечение секунд или долей секунд происходит при преобразовании с клиента на сервер, устанавливается состояние DBSTATUS_S_TRUNCATED.
в этом разделе
Преобразования, выполняемые при передаче от клиента к серверу
Описывает преобразования даты и времени, выполняемые между клиентским приложением, написанным с помощью SQL Server Native Client OLE DB, и SQL Server 2008 (или более поздней версии).
Преобразования, выполняемые при передаче от сервера к клиенту
Описывает преобразования даты и времени, выполненные между SQL Server 2008 (или более поздней версией) и клиентским приложением, написанным с помощью SQL Server Native Client OLE DB.