sql - 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
解决方案
此查询的结果是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
不符合条件ACOS
。ACOS
应该低于或等于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
推荐阅读
- discord.py - How do I make my logs server specific | discord.py
- python - 带有 nginx 和 gunicorn curl 的烧瓶:(56) Recv failure: Connection reset by peer
- macros - 在 Common Lisp 中通过循环生成包括取消引用拼接的代码
- mysql - (节点:19640)UnhandledPromiseRejectionWarning:SequelizeConnectionError:未知数据库'tech_blog_db'
- flutter - 如何从元素的中心旋转堆栈?
- reactjs - 想要创建一个可折叠的列表
- docusignapi - Docusign 嵌入式签名 - 如何增加嵌入式 url 到期时间?
- javascript - 以简单 html 形式请求的资源上不存在“Access-Control-Allow-Origin”标头
- c++ - 为什么 clang 在每次使用时都取消引用一个参数?
- python - 来自 SCIKIT 学习用户指南的 GridSearch 示例尝试给出错误