首页 > 解决方案 > System.Data.Entity.Core.EntityCommandExecutionException 发生无效的浮点操作

问题描述

执行此 sql 命令时出现以下异常:

SELECT (ACOS(SIN(PI()*51.0026829600855/180.0)*SIN(PI()*51.0026829600855/180.0)+COS(PI()*51.0026829600855/180.0)*COS(PI()*51.0026829600855/180.0)*COS(PI()*13.7910680057092/180.0-PI()*13.7910680057092/180.0))*6371) AS foo

System.Data.Entity.Core.EntityCommandExecutionException 发生了无效的浮点操作”</p>

如何更改查询以使其运行?我的方法是

ROUND( statement, 2) 

但它不起作用。

这是一个按经度和纬度的位置搜索

更新:也不适用于 SQL Server 2017 http://sqlfiddle.com/#!18/9eecb/38598

标签: sqlsql-server

解决方案


此查询的结果是6371

SELECT (
SIN(PI()*51.0026829600855/180.0)*SIN(PI()*51.0026829600855/180.0)+COS(PI()
    *51.0026829600855/180.0)*COS(PI()*51.0026829600855/180.0)*COS(PI()
    *13.7910680057092/180.0-PI()*13.7910680057092/180.0)
)*6371
 AS foo

但是,6371不符合条件ACOSACOS应该低于或等于1

例如:

SELECT ACOS(1) -- OK
SELECT ACOS(1.1) -- An invalid floating point operation occurred.

更新:

这个查询可能返回一个大于 1 的值。所以尝试使用CASE语句:

SELECT 
(
ACOS
(
    CASE WHEN      
        (SIN(PI()*51.0026829600855/180.0)*SIN(PI()*51.0026829600855/180.0)
        +COS(PI()*51.0026829600855/180.0)*COS(PI()*51.0026829600855/180.0)
        *COS(PI()*13.7910680057092/180.0-PI()*13.7910680057092/180.0)) > 1
        THEN 1
    ELSE      
        (SIN(PI()*51.0026829600855/180.0)*SIN(PI()*51.0026829600855/180.0)
        +COS(PI()*51.0026829600855/180.0)*COS(PI()*51.0026829600855/180.0)
        *COS(PI()*13.7910680057092/180.0-PI()*13.7910680057092/180.0)) 
    END 
)
*6371) AS foo

推荐阅读