2012-02-01 39 views
0

我試圖得到一個查詢工作,它返回一個從數據庫中的locId的列表餵養長和拉特。周邊地區SQL

這裏的SQL:

例如:LAT = 「-37.8333300」:LON = 「145.000000」:半徑=(5 * 0.621371192)^ 2

SELECT locId,longitude,latitude FROM tbliplocations WHERE (69.1*([longitude]- "&lon&") * cos("&lat&"/57.3))^2 + (69.1*([latitude]- "&lat&"))^2 < "&radius 

這裏的誤差我得到:

數據類型float和int在'^'運算符中是不兼容的。

我不確定解決方法,任何人都可以將我指向正確的方向嗎?

答:

使用SQL Server 2008 R2

SELECT city FROM tbliplocationsnew WHERE POWER((69.1*([longitude]- "&lon&") * cos("&lat&"/57.3)),2) + POWER((69.1*([latitude]- "&lat&")),2) < "&radius 

回答

4

不知道你用什麼數據庫,但我認爲 「^ 2」 SQL並不意味着 「平方」 像數學。你應該使用數學「強大」函數,如SQL Server中的POWER(number,2)(因爲你使用VB也許你使用SQL Server?)

+1

^是一個按位XOR http://stackoverflow.com/questions/5411619/t-sql-xor-operator – Jody 2012-02-01 01:24:08

+0

至少有一個例外:PostgreSQL對待^就像它看起來的電源功能(只需安裝一個並檢查,在閱讀網頁上關於PostgreSQL中算術運算符的一些頁面之後:select 10^2 returns 100)。但不是MySQL。必須檢查SQL標準。 – huelbois 2012-02-01 01:42:10

+0

謝謝Huelbois,那就是訣竅!用答案更新了問題 – Ben 2012-02-01 02:24:58

1

你需要有兩個相同的數據類型。 SQL認爲「5」是一個int。所以,你應該能夠欺騙它把它當作一個浮點數,把「5.0」代替。