【问题标题】:MySQL convert to datetime syntax error: unexpected IDENT_QUOTEDMySQL 转换为日期时间语法错误:意外 IDENT_QUOTED
【发布时间】:2013-05-31 11:38:29
【问题描述】:

我们有以下查询在 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 变量出现此错误:“Select CONVERT(datetime, dateVal)。”

如果我们删除第一个 CONVERT,则错误会移至下一行的下一个 CONVERT。因此,显然,我们的日期时间转换似乎存在错误。不知道我们做错了什么,有什么想法吗?谢谢大家。

【问题讨论】:

  • DateClickUTC字段的数据类型是什么?查看您的 WHERE 子句,它似乎已经是一个日期时间,所以也许不需要转换?
  • 在 MySQL 中,CONVERT 函数将目标数据类型作为它的第二个参数,而不是它的第一个参数。
  • @sgeddes - 该列是一个日期时间列,所以,是的,也许我们根本不应该转换它。这是由不再与我们合作的开发人员编写的旧代码,所以我不确定他是否有此目的......

标签: mysql sql syntax ident


【解决方案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

【讨论】:

  • @madeFromCode -- np,很高兴我们能提供帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
相关资源
最近更新 更多