Доступ вызывает ошибку при использовании функции datevalue() с датой и временем

Я получаю сообщение об ошибке «выражение введено неправильно или слишком сложно для оценки» при попытке использовать функцию datevalue() с полем даты/времени в access 2016.

Вот код запроса, который я пытаюсь использовать.

Если я переключаю параметры для фактических значений даты, я получаю сообщение об ошибке несоответствия данных при попытке выполнить запрос. Есть мысли по этому вопросу может быть?

SELECT 
      dbo_vTTSTMW_ResourceMileage.[Driver1 ID], 
      dbo_vTTSTMW_ResourceMileage.[Driver1 Name], 
      dbo_vTTSTMW_ResourceMileage.[Order Header Number],
      dbo_vTTSTMW_ResourceMileage.[Total Miles], 
      dbo_vTTSTMW_ResourceMileage.[Empty Miles], 
      dbo_vTTSTMW_ResourceMileage.[Loaded Miles], 
      DateValue([Segment Start Date]) AS [Order Date]
FROM 
      dbo_vTTSTMW_ResourceMileage
GROUP BY 
      dbo_vTTSTMW_ResourceMileage.[Driver1 ID], 
      dbo_vTTSTMW_ResourceMileage.[Driver1 Name], 
      dbo_vTTSTMW_ResourceMileage.[Order Header Number], 
      dbo_vTTSTMW_ResourceMileage.[Total Miles], 
      dbo_vTTSTMW_ResourceMileage.[Empty Miles], 
      dbo_vTTSTMW_ResourceMileage.[Loaded Miles], 
      DateValue([Segment Start Date])
HAVING 
      (((DateValue([Segment Start Date]))>=[start date] And (DateValue([Segment Start Date]))<=[end date]));

person Tom    schedule 23.02.2017    source источник
comment
Попробуйте выполнить SELECT TOP 1 VarType([Segment Start Date]) AS n FROM dbo_vTTSTMW_ResourceMileage и сравните число со списком здесь. Возвращает ли запрос значение Date (значение VarType, равное 7) для этого столбца? Если он возвращает строку (значение VarType равно 8), есть ли в строке доли секунды, например, «2017-02-03 11:23:45.789»?   -  person Gord Thompson    schedule 23.02.2017
comment
Таким образом, возникла проблема с тем, что некоторые значения даты были нулевыми (не знаю, как это произошло, но проблема будет в другой раз). Я смог заменить значение даты для тех, кто использует функцию nz(). однако при попытке использовать параметры и значение 01.01.2017 и 21.02.2017 возвращаемое значение не обязательно находится в диапазоне, что заставляет меня думать, что есть еще одна проблема со значением даты.   -  person Tom    schedule 23.02.2017


Ответы (1)


Попробуйте указать параметры:

PARAMETERS 
    [start date] DateTime,
    [end date] DateTime;
SELECT 
      dbo_vTTSTMW_ResourceMileage.[Driver1 ID], 
      dbo_vTTSTMW_ResourceMileage.[Driver1 Name], 
      dbo_vTTSTMW_ResourceMileage.[Order Header Number],
      dbo_vTTSTMW_ResourceMileage.[Total Miles], 
      dbo_vTTSTMW_ResourceMileage.[Empty Miles], 
      dbo_vTTSTMW_ResourceMileage.[Loaded Miles], 
      DateValue([Segment Start Date]) AS [Order Date]
FROM 
      dbo_vTTSTMW_ResourceMileage
GROUP BY 
      dbo_vTTSTMW_ResourceMileage.[Driver1 ID], 
      dbo_vTTSTMW_ResourceMileage.[Driver1 Name], 
      dbo_vTTSTMW_ResourceMileage.[Order Header Number], 
      dbo_vTTSTMW_ResourceMileage.[Total Miles], 
      dbo_vTTSTMW_ResourceMileage.[Empty Miles], 
      dbo_vTTSTMW_ResourceMileage.[Loaded Miles], 
      DateValue([Segment Start Date])
HAVING 
      (((DateValue([Segment Start Date]))>=[start date] And (DateValue([Segment Start Date]))<=[end date]));
person Gustav    schedule 23.02.2017