SQL - 更改字母数字列的数据类型

SQL - Changing data type of an alphanumeric column

我在使用 Teradata。我有一个 ID 列,如下所示:

23
34 
W7
007
021
90
GS8

我想将数字转换为数字,所以 007 应该是 7,021 应该是 21。当数字存储为字符串时,我通常会 column * 1 转换为数字,但在这种情况下给我一个错误的字符错误,因为那里有字母。

如何在查询中的 select 语句中执行此操作?

假设数值总是以数字开头,那么这样的事情应该可行:

update t
     set col = (case when substr(col, 1, 1) between '0' and '9'
                     then cast(cast(col as int) as varchar(255))
                     else col
                end);

或者,您可以忘记转换并执行:

update t
    set col = trim(leading '0' from col);

注意:这两个假设如果第一个字符是数字那么整个字符串都包含数字。第二个假定值不全为零(或者更具体地说,returns 为空字符串)。

简单地使用 TO_NUMBER(col) 其中 returns NULL 当转换失败时。