【问题标题】:Converting CLOB to NUMBER to compare - Oracle将 CLOB 转换为 NUMBER 以进行比较 - Oracle
【发布时间】:2014-04-04 16:54:49
【问题描述】:

我是 oracle 新手,我的问题很简单,可以将 CLOB 字段转换为 NUMBER 类型进行比较。

我尝试过使用 CAST 以及 TO_NUMBER 函数,但我没有得到任何工作。

我的尝试:

WHERE TO_NUMBER(clob_field) = 100 -> Error ORA-01722: NOT a valid number

WHERE CAST(clob_field as NUMBER) = 100 -> Error ORA-00932:Inconsistent datatypes

如果这不可能,那么最好的方法是什么?

感谢您的时间和帮助。

【问题讨论】:

  • 您的clob_field 至少在其中一行中有一个非数字..!
  • 如果您需要将 CLOB 与数字进行比较,那么您应该检查您的数据库模型,因为有些地方不正确。
  • 是来自开源软件项目的数据库,有必要这样做,以便从另一个数据库进行数据迁移......我希望从零开始,但规格是给定...
  • @OracleUser 那么我应该尝试转换为 varchar 然后转换为数字?¿ 或类似的东西......
  • @Tommy - 您需要查看列中的值,看看它们是否看起来像数字,如果它们通常是数字,那么它们是不可转换的。使用clob 来保存足够短的文本值来表示一个数字似乎仍然很奇怪。 (您可以调整 this answer 中的 PL/SQL 块以显示哪些值不是数字)。

标签: sql oracle type-conversion sqldatatypes clob


【解决方案1】:

将其与 varchar 进行比较以消除错误消息:

WHERE TRIM(clob_field) = '100'

如果100 周围没有空格,您可以跳过TRIM

WHERE clob_field = '100'

【讨论】:

  • 是的.. 还有 "+1.0" "1"
  • 谢谢你们的帮助
【解决方案2】:

先将其转换为VARCHAR2,然后再转换为NUMBER

CAST(CAST(clob_field AS VARCHAR2(200)) AS NUMBER(10))

【讨论】:

  • 这不会在clob_field 无法转换为数字时停止错误。
  • 是的,但有时您知道它们是数字,当通过使用正则表达式解析CLOB 来检索值时。
  • 用于分组(用于小型 INT 和 CLOB,知道它是存储的数字)为:... group BY CAST(CAST(value AS VARCHAR2(200)) AS NUMBER(1))
猜你喜欢
  • 2013-06-09
  • 2016-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多