首页 > 解决方案 > 我想将数据从 oracle 数据库导出到 csv,并且我在 varchar 列上放置了一个数字过滤器。它抛出 ORA:01722 错误。请建议

问题描述

Select count(*) from table where loc between 300 to 400. 
  1. loc是一个 varchar 列。
  2. 它没有选择所有数据
  3. 检查计数,给出 ORA :01722 错误
  4. 导出错误的结果。

从评论编辑:

loc 包含小于 300、大于 400 和字母数字的值,例如 'GT' 、 '3KT1'

标签: oracletype-conversionexport-to-csvdata-conversionora-01722

解决方案


您当前的查询正在尝试将 varchar 与数字进行比较。因此,它会尝试将 varchar 即时转换为数字。这称为隐式转换。

您应该让它将 varchar 与 varchar 进行比较。

使用单引号,以便您与 varchars 进行比较,而不是数字

Select count(*) from table where loc between '300' to '400'

然后去阅读隐式转换

根据对您问题的更新,此列是合法的 varchar,不应转换为数字数据类型。

但是,您确实需要确定是否在同一列中错误地存储了不同类型的数据


推荐阅读