将 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的主要内容,如果未能解决你的问题,请参考以下文章