将 CLOB 转换为 NUMBER 以进行比较 - Oracle

Posted

技术标签:

【中文标题】将 CLOB 转换为 NUMBER 以进行比较 - Oracle【英文标题】:Converting CLOB to NUMBER to compare - 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 块以显示哪些值不是数字)。 【参考方案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))

以上是关于将 CLOB 转换为 NUMBER 以进行比较 - Oracle的主要内容,如果未能解决你的问题,请参考以下文章

Oracle怎样把varchar2型转成number型

使用 setString() 从 String 转换为 Clob 不起作用

将列从 Varchar2 转换为 CLOB 后查询无法执行

oracle中number类型 默认长度是多少

将整数转换为数字列表

oracle中如何将long型的数据转换为char型