MySQL преобразуется в синтаксическую ошибку даты и времени: неожиданный IDENT_QUOTED

У нас есть следующий запрос, который отлично работает в MSSQL, но не работает в MySQL:

select CONVERT(datetime, dateVal) as DateOccurred, itemID, COUNT(*) as Hits from (
select itemID, CONVERT(datetime, DateClickUTC) as dateVal
from tb_items
where DateClickUTC >= '2008-06-03 22:00:28.893' and DateClickUTC <= '2013-06-03 22:00:28.893'
group by CONVERT(datetime, DateClickUTC), UserID, itemID) as a
group by a.dateVal, itemID

Ошибка, которую мы получаем из MySQL, говорит:

синтаксическая ошибка, неожиданный IDENT_QUOTED

Эта ошибка возникает в переменной dateVal в первой строке: "Выберите CONVERT (datetime, dateVal)".

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

1 ответ

Решение

Я предпочитаю использовать CAST, но, как уже говорили другие, вам нужно указать тип после поля следующим образом:

convert(DateClickUTC,datetime)

Вот рабочий пример использования CAST:

select  a.dateVal as DateOccurred, itemID, COUNT(*) as Hits 
from (
  select itemID, cast(DateClickUTC as datetime) as dateVal
  from tb_items
  where DateClickUTC >= '2008-06-03 22:00:28.893' and DateClickUTC <= '2013-06-03 22:00:28.893'
  group by cast(DateClickUTC as datetime), UserID, itemID
) as a
group by a.dateVal, itemID

Кстати, вам на самом деле не нужен подзапрос в этом случае - это также должно работать:

select cast(DateClickUTC as datetime) as DateOccurred, 
   itemID, 
   COUNT(*) as Hits 
from tb_items
where DateClickUTC >= '2008-06-03 22:00:28.893' and DateClickUTC <= '2013-06-03 22:00:28.893'
group by cast(DateClickUTC as datetime), itemID
Другие вопросы по тегам