2011-10-31 105 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

好建議/我也會試試這個。 –