Преобразования (OLE DB)
Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse AnalyticsAnalytics 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 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.
См. также:
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по