首页 > 解决方案 > 如何加入 SQL 中的浮点列?

问题描述

在 ANSI SQL(或重要实现)中加入浮点列是否合法?

我确信这通常不是一个好主意,但我正在开发一个 API,并寻求 SQL 来指导它是否应该被阻止,或者留给开发人员选择。

如果它是合法的,您是否可以选择指定在比较中使用的精度?

标签: sql

解决方案


SQL 允许加入任何列和任何条件。

但是,如果您可以防止在此类列上使用相等条件,则不应允许在浮点列上加入。简单的替换是允许在十进制/数字列上进行连接。

问题是什么?WYSIWIG(所见即所得)是问题所在。两个浮点值可以看起来相同,但又可能不同。这会导致joins 失败。

您基本上可以指定条件:

on abs(a - b) < 0.00001 -- your favorite threshold

但这会阻止使用索引。某些数据库可能对浮点数进行“模糊”匹配。

在某些情况下,您可能希望使用浮点值进行不等式连接。这将是在做范围时:

limit       val
1.4142     'a'
2.7182     'b'
3.1415     'c'

但这是一种罕见的情况——特别是当限制应该是浮点数而不是计数或货币限制时。


推荐阅读