sql - 如何加入 SQL 中的浮点列?
问题描述
在 ANSI SQL(或重要实现)中加入浮点列是否合法?
我确信这通常不是一个好主意,但我正在开发一个 API,并寻求 SQL 来指导它是否应该被阻止,或者留给开发人员选择。
如果它是合法的,您是否可以选择指定在比较中使用的精度?
解决方案
SQL 允许加入任何列和任何条件。
但是,如果您可以防止在此类列上使用相等条件,则不应允许在浮点列上加入。简单的替换是允许在十进制/数字列上进行连接。
问题是什么?WYSIWIG(所见即所得)是问题所在。两个浮点值可以看起来相同,但又可能不同。这会导致join
s 失败。
您基本上可以指定条件:
on abs(a - b) < 0.00001 -- your favorite threshold
但这会阻止使用索引。某些数据库可能对浮点数进行“模糊”匹配。
在某些情况下,您可能希望使用浮点值进行不等式连接。这将是在做范围时:
limit val
1.4142 'a'
2.7182 'b'
3.1415 'c'
但这是一种罕见的情况——特别是当限制应该是浮点数而不是计数或货币限制时。
推荐阅读
- python - 使用 Tkinter 创建自定义对话框
- python - 堆算法 - Python 中用于生成排列的非递归方法
- twilio - 播放文档中的示例导致“无效的内容类型”
- http - 中止 HTTP 请求而不关闭 Netty 中的连接
- c++ - printf("%.0f",x); C++ 中 round() 函数的替代方案!我的尝试正确吗?
- html - 如何在 html 代码中选择第一个表的最后一行?
- javascript - 如何从 mp3 文件中获取元数据并将它们转换为 HTML 格式?
- python - 为什么 Django 不渲染所有 HTML 元素?
- node.js - 从 GET 请求 url 获取参数值。“类型错误:无法读取属性”
- node.js - 未定义的属性“推送”