如果CAST失败,如何返回null?

时间:2017-09-20 17:39:08

标签: oracle oracle12c

在下面的SELECT语句中,我将varchar2转换为整数值。如果演员表失败,我如何返回NULL?如果文本,例如CAST将失败。 '狗'不能转换为整数。该列包含存储为字符串(varchar2)和NULL的整数。

SELECT CAST(text_column AS NUMBER(*,0)) column_alias
FROM schema.table@dblink;

更新 - SELECT * FROM V$VERSION;显示Oracle Database 12c Enterprise Edition Release 12.1.0.2.0

2 个答案:

答案 0 :(得分:2)

如果您使用的是Oracle 12.2,则可以将TO_NUMBER与新的ON CONVERSION ERROR子句一起使用。见http://docs.oracle.com/database/122/SQLRF/TO_NUMBER.htm#SQLRF06140

示例:

select to_number('dog' default null on conversion error) from dual;

答案 1 :(得分:0)

您需要检查该值是否确实是一个整数并自行处理; SQL中没有“错误处理”,就像过程语言一样。

例如,如果您没有太多数据,使用正则表达式进行检查可能没问题。

这样的东西
select cast ( case when regexp_like(text_column, '^(+|-)?\d+$') 
                   then text_column    -- else NULL;  this is the default anyway
              end 
              as number(*,0)
            ) as column_alias
from .......