2012-01-03 320 views
1

你能帮我知道什么可能是我的SQL错误? 我有遗漏的表达错误,但我找不到错误。 非常感谢您提前。SQL错误:ORA-00936:缺少表达式

SELECT SYSTEMNAME, round(MAX(GBL_CPU_TOTAL_UTIL),2) AS AVE_CPU, 
convert(varchar(20),DATEADD(hour, DATEDIFF(hour, 0, DATETIME), 0),110) AS DATE 
FROM dbo.[GLOBAL] 
WHERE (SYSTEMNAME IN ('X1','X2','X3'))  
AND (DATETIME > DATEADD(month, - 24, GETDATE())) 
AND (DATETIME BETWEEN '12-27-2011 00:00' AND '12-30-2011 00:00') 
GROUP BY SYSTEMNAME, convert(varchar(20), 
DATEADD(hour, DATEDIFF(hour, 0, DATETIME), 0),110) 
ORDER BY DATE 

错误:

ORA-00936: missing expression 
00936. 00000 - "missing expression" 
*Cause:  
*Action: 
Error at Line: 2 Column: 9 
+0

对DATE字段使用引用>按“DATE”排序; – 2013-03-29 14:38:15

回答

2

convert(varchar(20), ...

据我所知,convert用于将字符串从一个字符集转换为另一个字符集。 varchar(20)而不是一个字符串。这也可能是这种情况,因为“第2行,第9列”正是varchar(20)所在的位置。

convert国DOCO:


convert(string1 , char_set_to , [ char_set_from ])
string1 is the string to be converted.
char_set_to is the character set to convert to.
char_set_from is the character set to convert from.


如果你的意图是要将日期差异转换为varchar(20)类型,则应该使用cast

+0

好的会改变。谢谢。 – Jemru 2012-01-03 08:06:52

+2

这个SQL很奇怪..很奇怪。大部分函数,​​'dbo'都指向T-SQL。看起来SQL已经从SQL Server查询盲目复制+粘贴 – Sathya 2012-01-03 08:10:11