4

SQL Server 2008 の MAX/MIN 集計関数が負の数で期待どおりに機能しないことに気付きました。

私は緯度と経度の値 (多くは負の # です) を扱っていましたが、絶対値のみを見ているように見える結果が得られています。

SELECT 
    MAX(g.Geo_Lat) AS MaxLat, MAX(g.Geo_Long) AS MaxLong,
    MIN(g.Geo_Lat) AS MinLat, MIN(g.Geo_Long) AS MinLong  
FROM Geolocations g

クエリの結果は次のとおりです。

MaxLat          MaxLong         MinLat        MinLong
38.3346412      -85.7667496     38.1579234    -85.5289429

maxlong と minlong の結果が正しくないことに注意してください。

これに対する回避策はありますか (特別な UDF 以外に)?

4

2 に答える 2

5

データ型と照合によって順序が決まります。

たとえば地理タイプとして格納された地理データは、浮動小数点値とは異なる方法でソートできますが、この場合はそうではありません。Gopegraphic タイプはソート可能ではなく、表示されているように緯度と経度のみがソート可能です。しかし、それらは float 値として出力されます。

これが発生する原因となるデータ型を使用していますか? いくつかのテストの後、私は最終的にそれを理解しました。地理データ、または負の数値を保持する任意の数値型に対して期待どおりに機能します。

緯度と経度をテキストデータとして保存していますね。

それらをフロートとしてキャストします。それはそれを修正します。

于 2012-06-12T19:30:45.670 に答える
3

最大および最小の集計は、SQL Server 2008 で期待どおりに機能しました。Geolocations テーブルの列の種類を指定できますか?

テーブル内の場所によって異なります。エントリーが増えれば近づくほど、

MaxLat          MaxLong             MinLat           MinLong
90              180                 -90              -180
south pole      far west of        north pole       far east of 
                prime meridian                      prime meridian

本初子午線 0 度は、イギリスのロンドンを通過します。-180 と 180 は 0 の反対側の同じ線です。

行が数行しかない場合は、これらの場所をテーブルに追加してみてください。

insert into Geolocations (Geo_Lat, GeoLong) values(-180,-90)
insert into Geolocations (Geo_Lat, GeoLong) values(0,0)
insert into Geolocations (Geo_Lat, GeoLong) values(180,90)
于 2012-06-12T19:07:23.773 に答える