代码之家  ›  专栏  ›  技术社区  ›  Auguster

TRUNC(NVL(列,'2'))ORA-01722:无效数字

  •  0
  • Auguster  · 技术社区  · 7 年前

    我在表中有一列 varchar2(3) 样式列。此列有一些空值,当我尝试运行下面的查询时,它会运行一些记录,但当我滚动到某个记录时,会得到 ORA-01722: invalid number 错误。

    使用的查询:

    Select TRUNC(NVL(COLUMN, '2'))
    from TABLE;
    

    Select distinct COLUMN
    from TABLE;
    

    我得到以下结果:

    1   
    2   62
    3   90
    4   70
    5   82
    6   71
    7   05
    8   21
    9   81
    10  66
    11  12
    12  95
    13  02
    14  91
    15  92
    16  94
    17  01
    18  65
    19  30
    20  20
    21    
    22  50
    23  63
    24  51
    25  64
    26  09
    

    为什么我会犯这个错误,我怎么能不犯错误呢?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Barbaros Özhan    7 年前

    https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions200.htm

    因为你想弹一根弦,但是 TRUNC number date .

    此函数将可以隐式转换为数值数据类型的任何数值数据类型或任何非数值数据类型作为参数

    可能您的字符串值之一无法转换为数字

    编辑:您的21t值不是一个数字,也不是空的,您应该修剪您的列

    SELECT trunc(nvl(trim(column),'2')) 
    FROM table;