Тип данных Date/Time Extended предназначен для хранения информации о дате и времени, он аналогичен типу данных Date/Time, но обеспечивает более широкий диапазон дат, более высокую точность дробных значений, а также совместимость с типом дат datetime2 SQL Server. При импорте или связывании данных Access с SQL Server можно непосредственно размещать данные из поля Date/Time Extended в Access в столбце datetime2 в SQL Server. Дополнительные сведения см. в спецификации datetime2 (Transact-SQL).
При создании выражений и использовании функций date/time на основе типа данных Date/Time Extended в Access возможна потеря точности вычислений или возникновение других проблем с результатами. Нам известна эта проблема, и мы планируем улучшить поддержку выражений и функций в предстоящем выпуске. В качестве временного решения проблемы можно создать запрос к внешнему источнику для использования эквивалентного выражения и функций date/time SQL Server. Дополнительные сведения см. в статье Сравнение языков Access SQL и SQL Server TSQL.
В этой статье
Сравнение типов данных Date/Time и Date/Time Extended
В нижеприведенных таблицах перечислены важные различия между двумя типами данных.
| Атрибут | Date/Time | Date/Time Extended |
|---|---|---|
| Минимальное значение | 100-01-01 00:00:00 | 0001-01-01 00:00:00 |
| Максимальное значение | 9999-12-31 23:59:59.999 | 9999-12-31 23:59:59.9999999 |
| Точность | 0,001 секунды | 1 наносекунда |
| Размер | Двойная точность числа с плавающей запятой | Строка кодировки из 42 байтов |
Использование типа данных Date/Time Extended
Ниже приведены важные практические рекомендации.
Режим конструктора таблиц Чтобы использовать преимущества большего диапазона данных и их более высокой точности, можно добавить поле в таблицу Access. Кроме того, вы можете преобразовать тип данных Date/Time в Date/Time Extended в режиме конструктора таблиц. Поле этого типа данных также можно использовать в качестве поля первичного ключа. Дополнительные сведения см. в статье Создание таблицы и добавление полей.
Ввод даты и времени Ввод значений даты и времени производится так же, как в типе данных Date/Time, за исключением того, что дробную часть теперь можно ввести в наносекундах. Например:
- Формат записи: дд/мм/гггг чч:мм:сс,ннннннн
- Пример: 15/06/1215 09:25:3,234
Если количество десятичных разрядов в долях секунды превышает 7, число округляется до 7 разрядов. Чтобы изменить формат отображения дробной части, откройте таблицу, на ленте выберите пункт "Поля", а затем в группе "Форматирование " выберите "Увеличить разрядность
" или "Уменьшить разрядность
".
Форматирование В обоих типах данных Date/Time и Date/Time Extended используются схожие строки стандартного форматирования ( General Date, Long Date, Medium Date, Short Date, Long Time, Medium Time и Short Time ), которые поддерживают пользовательское форматирование. Для типа данных Date/Time Extended стандартные форматы, основанные на времени, также поддерживают точность дробных значений в наносекундах. При форматировании типа данных Date/Time Extended по умолчанию используются Общий формат даты и Длинный формат времени, а также параметры, заданные в Региональных параметрах Windows. Кроме того, можно управлять форматированием округления с помощью параметра Разрядность, указав количество цифр справа от десятичной запятой (1–7).
Связывание и импорт Кроме того, можно создать связь с данными или импортировать их из баз данных, содержащих соответствующий тип данных, например тип данных datetime2 в SQL Server. Поддерживаются базы данных SQL Server версии 2014 и более поздних версий. Для типа данных Date/Time Extended необходимо использовать драйвер Microsoft ODBC for SQL Server 11 или более поздней версии. Рекомендуется использовать драйвер Microsoft ODBC 13.1 для SQL Server. Также поддерживается использование OLE DB. Дополнительные сведения см. в статьях Поддержка типов данных для улучшений функции даты и времени в ODBC и Использование расширенных функций даты и времени (OLE DB).
Формы и отчеты В форму или отчет можно добавлять данные типа Date/Time Extended. В форме можно использовать элемент управления "Выбор даты" и маску ввода, чтобы указать дату с более широким диапазоном, но точность дробных значений в наносекундах не поддерживается.
Поддержка выражений Тип данных Date/Time Extended поддерживает агрегатные функции SQL и оценку выражений. Например, использование LoggedDateTime в качестве поля типа данных Date/Time Extended:
| Задача | Пример | Результат |
|---|---|---|
| Поиск минимального значения | Min(LoggedDateTime) | Самые ранние значения даты и времени в диапазоне. |
| Извлечение месяца | Month(LoggedDateTime) | Название месяца, например январь |
| Добавление одного дня | [LoggedDateTime]+1 | Вторник становится средой |
Обратная совместимость
Тип данных Date/Time Extended несовместим с предыдущими версиями Microsoft Access. Если этот тип используется в локальной таблице Access, базы данных не будут доступны для версий Access, не включающих этот компонент.
Вы можете включать и отключать тип данных Date/Time Extended для связывания и импорта операций с помощью параметра "Доступ к текущей базе данных". Поддержка типа данных Date/Time Extended для связанных или lmported таблиц. Дополнительные сведения см. в статье Настройка пользовательских параметров текущей базы данных.
Использование типа данных Date/Time Extended в качестве строки в VBA
В следующих примерах VBA для просмотра, ввода и оценки типа данных Date/Time Extended из приведенной ниже таблицы используются методы DAO.
| ИД | DTEData | DTData |
|---|---|---|
| 1 | 1/1/2 1:01:03,1234567 | 1/1/2001 |
Имя таблицы: DTETable (поддержка DTETable)
Тип данных "ИД": Счетчик
Тип данных DTEData: Date/Time Extended
Тип данных DTData: Дата и время
Пример: Отображение даты и времени
В приведенном ниже примере отображаются дата и время. Используется формат дд/мм/гггг чч:мм:сс,ннннннн для 24-часового представления времени. Формат не настраивается.
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("DTETable")
Do Until rs.EOF
Debug.Print rs!DTETable
rs.MoveNext
Loop
Result (Результат) Представление Access: 01/01/0002 01:01:03,1234567.
Пример: Ввод даты и времени
В приведенном ниже примере дата и время вводятся с использованием строкового формата. Поддерживаются все стандартные форматы даты и времени.
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("DTETable")
With CurrentDb.OpenRecordset("DTETable")
.AddNew
![DTEData] = "1/1/9999 1:1:1.0123 AM"
![DTData] = #1/1/2001#
.Update
End With
Result (Результат) Access добавит новую строку (ИД = 2):
| ИД | DTEData | DTData |
|---|---|---|
| 1 | 1/1/2 1:01:03,1234567 | 1/1/2001 |
| 2 | 1/1/9999 1:01:01,0123000 | 1/1/2001 |
Пример: Оценка выражения запроса
В приведенном ниже примере функция Day используется для извлечения числового значения дня из полей даты и времени.
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT Day(DTEData) as day FROM DTETable")
Do Until rs.EOF
Debug.Print "The day of the month is: "&rs!day
rs.MoveNext
Loop
Result (Результат) Представление Access:
День месяца: 1
День месяца: 1
Функции, работающие с расширенной и датой (Date/Time Extended) в выражениях запросов
Указанные ниже функции работают с расширенной датой и временем в выражениях запросов.
Year, Month, Weekday, Day, Hour, Minute, Second, DateAdd, DateDiff и DatePart.
Кроме того, существуют расширенные версии некоторых функций, которые не могут использовать этот тип аргумента для определения того, что вычисление должно дать значение Date/Time Extended. К ним относятся:
DateValueExtended, TimeValueExtended, DateSerialExtended, TimeSerialExtended, NowExtended, DateExtended, DateTimeExtended и TimeExtended.
Эти функции работают так же, как и функция без слова "Extended" в конце, но возвращают значение Date/Time Extended, а не Date/Time.
Обратите внимание, что VBA не был изменен, новые функции не будут распознаны в коде VBA, а существующие функции не будут работать со значениями Date/Time Extended.
Пример
Исходный запрос:
Select DateValue([OrderDate]) AS OrderDateOnly_DateValue
, Format([OrderDate],"Short Date") AS OrderDateOnly_Format
From tblOrders
Теперь измените DateValue([OrderDate]) на DateValueExtended([OrderDate]), что исправит первое выражение.
Обратите внимание, что функция "Формат" не работает со столбцами типа "Дата и время (расширенный)". можно просто задать свойство "Формат" для столбца.
Поэтому, если вы используете:
SELECT DateValueExtended([OrderDate]) AS OrderDateOnly_DateValue, Table1.OrderDate
FROM Table1;
И установите свойство Формат для второго столбца в "Короткая дата", вы получите нужные результаты.
См. также
Введение в использование типов данных и свойств полей