【问题标题】:Select where number equals Infinity选择数字等于无穷大的地方
【发布时间】:2014-10-01 08:37:46
【问题描述】:

在 SQL 中,如何在 Oracle 10g 上选择列(数据类型:number)等于Infinity 的表中的行?

select * from MYTABLE where MYCOLUMN = Infinity;

【问题讨论】:

  • 列的数据类型是什么?
  • @Sasse 这是number
  • 你用的是什么数据库?
  • 我猜“MYCOLUMN is INF”会起作用。
  • 更新 for 12.1 - 在NUMBERcolumn 中插入 Infinity 引发ORA-01426,因此查询有效,但不会返回任何结果。数据类型必须是 BINARY_FLOAT 才能覆盖 Infinity。

标签: sql oracle numbers infinity


【解决方案1】:

来自Laurent Schneider

select * from MYTABLE where MYCOLUMN = binary_double_infinity;

或者使用隐式转换,只需:

select * from MYTABLE where cast(MYCOLUMN as binary_double) = binary_double_infinity;

或者使用the is infinite floating point condition:

select * from MYTABLE where cast(MYCOLUMN as binary_double) is infinite;

我会附上一个 SQL Fiddle,但正如 Laurent 所说,“预计您的 oracle 客户端会出现很多错误”;这在 SQL Developer 中有效,但 SQL Fiddle 会出现数字溢出。

【讨论】:

  • 好,我不知道is infinite
  • @LalitKumarB - 直到几分钟前我才尝试了解为什么 is inf 不起作用 *8-)
【解决方案2】:

我们先看看如何获​​取Infinity

SQL> SELECT 1/0F COL FROM DUAL
  2  /

       COL
----------
       Inf

现在,让我们看一下比较:

SQL> WITH DATA AS(
  2  SELECT 1/0F COL FROM DUAL)
  3  SELECT * FROM data WHERE col = binary_double_infinity
  4  /

       COL
----------
       Inf

更新:感谢 Alexis infinite 子句也是一个选项。

我在12.1.0.1

is infinite 子句相同的查询:

SQL> WITH DATA AS(
  2  SELECT 1/0F COL FROM DUAL)
  3  SELECT * FROM data WHERE col is infinite
  4  /

       COL
----------
       Inf

【讨论】:

  • 由于 is infinite 测试正无穷和 无穷大,应添加额外的谓词 and n > 0 以获得与 col = binary_double_infinity 相同的结果。跨度>
猜你喜欢
  • 2022-08-12
  • 2018-01-09
  • 2016-11-04
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多