SQL Server 2008 MAX和MIN功能无法正常工作,带负数

时间:2012-06-12 19:02:36

标签: sql-server sql-server-2008 max min sqldatatypes

我注意到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)?

2 个答案:

答案 0 :(得分:5)

数据类型和归类确定订单。

地理数据(例如存储为地理类型)可以与浮点值排序不同 - 但在这种情况下,它们不会。当您展示时,Gopegraphic类型不可排序,只有纬度和经度。但那些输出为浮动值。

您使用哪种数据类型会导致这种情况发生?在进行一些测试之后,我终于弄明白了。对于地理数据或任何包含负数的数字类型,它将按预期工作。

您将纬度和经度存储为文本数据 - 不是吗?

将它们作为花车投射。这将解决它。

答案 1 :(得分:3)

Max和Min聚合在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)