sql-server - SQL Server 2008 MAX 和 MIN 函数在处理负数时无法按预期工作

标签 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)?

最佳答案

数据类型和排序规则决定顺序。

地理数据(例如存储为地理类型)的排序方式可能与浮点值不同 - 但在本例中,它们不会。地理类型不可排序,只有纬度和经度可以排序,如您所显示的。但这些输出为浮点值。

您使用的是什么数据类型会导致这种情况发生?经过一些测试,我最终弄清楚了。对于地理数据或任何包含负数的数字类型,它可以按预期工作。

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

将它们转换为漂浮物。这样就可以解决问题。

关于sql-server - SQL Server 2008 MAX 和 MIN 函数在处理负数时无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11003116/

相关文章:

sql - 非数字列中的SQL MAX函数

ruby-on-rails - 在 Ruby 中使用 max_by 查找哈希中最大数字的键

sql-server - SQL 从动态 SQL 写入临时表

php - 如何使用 MSSQL 配置 XAMPP v. 3.2.2 (PHP 7.2)?

c# - 初始化存储过程输出参数

sql - 迁移带有时间戳列的数据库表

sql-server - 安装后 SQL Server Profiler 丢失

c# - SQL Server 2008 R2 Express Service Broker 正在使用所有空闲内存

sql-server-2008 - SQL Server 2008中垂直过滤表(某些列)上的双向复制类型的解决方案是什么

mysql - 在最大日期小于当前日期的组中选择最大日期