2011-10-31 98 views
0

当我执行此查询时,显示以下错误。SQL查询奇怪的错误

[消息8114,级别16,状态5,行1
误差变换数据类型为varchar浮动。]

我想知道该错误是在比较部分即fb_userevents.userid = '100002917025417'当这个单个的“长”字符串被替换为1或0。而不是引用(')它为什么试图转换为浮动?

我使用SQL Server 2005

select 
    fb_event.eventname 
from 
    fb_event 
inner join 
    fb_userevents on fb_userevents.eventid = fb_event.eventid 
where 
    fb_userevents.userid = '100002917025417' 
    and DATEDIFF(hh,fb_event.startdate,getdate()) < 0 
    and acos(sin(0) * sin(convert(float,altitude)) + 
     cos(0) * cos(convert(float,altitude)) * 
     cos(convert(float,longitude) - 101)) * 6371 <= 1000 

的altitutes和用户的longitutes: enter image description here

+0

其varchar,当然 –

+1

哦当然。我忘记了ID字段应该是字符串。而且还有我使用整数...... –

+1

错误将来自“海拔高度”或“经度”中的无效值。 –

回答

4

您确定问题不在于此线吗?

cos(convert(float,altitude)) 

什么样的数据类型是海拔?并且该列中的每个值是否只包含数字字符?

+0

是的所有数字字符也很少在负数 –

+2

@XXXcoder - 这就是你的想法!当然,你不能保证这是因为你使用了错误的数据类型。尝试'选择转换(浮点数,高度),转换(浮点数,经度)from your_table' –

+0

@XXXcoder - 我强烈赞同Martin的观点,如果'altitude'或'longitude'是VARCHAR字段,则至少有一个字符串值无法转换为FLOAT值。 – MatBailie

0

您可能需要做一个明确的转换或转换该字段。

+0

好建议/我也会试试这个。 –