2012-02-01 20 views
0

私は長いと緯度を与えられたときにデータベースからlocIdのリストを返すクエリを取得しようとしています。周辺地域SQL

は、ここにSQLです:

例:LAT = "-37.8333300":LON = "145.000000":半径=(* 0.621371192 5)^ 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(数値、2)のような数学的な「力」関数を使用する必要があります(VBを使用すると多分SQL Serverを使用するでしょう)

+1

^ビットごとのXORです。http://stackoverflow.com/questions/5411619/t-sql-xor-operator – Jody

+0

少なくとも例外があります。PostgreSQLは^と同じように扱います^ PostgreSQLの算術演算子についてウェブ上のあるページを読んだら、select 10^2 returns 100)。しかし、MySQLではありません。 SQL標準をチェックしました。 – huelbois

+0

ありがとうHuelbois、そのトリックをした!更新された質問と回答 – Ben

1

同じデータ型を2つ持つ必要があります。 SQLは "5"がintであると考えます。だから、代わりに "5.0"を置くことで、それを浮動小数点として扱うようにする必要があります。