测试数值?

Chr*_*ris 3 db2

我们在临时表中加载的供应商数据相当脏.一列特别捕获数字数据,但40%的时间具有垃圾字符或随机字符串.

我必须创建一个过滤掉该列中值范围的报告.所以,我尝试使用替换/翻译这样的组合

select replace(translate(upper(str),' ','all possible char'),' ','')
from table
Run Code Online (Sandbox Code Playgroud)

但是只要它遇到我没有编码的字符就会失败.因此,报告永远不会自动化.

Javascript具有isNaN()函数来确定值是否为非法数字(如果是,则为True,否则为false).

我怎么能用DB2做同样的事情?你有什么主意吗?

提前致谢.

bha*_*mby 11

一种相当可靠(但有点hackish)的方法是将字符串与其大写和小写自我进行比较(数字没有不同的情况).只要您带来的字符数据只包含拉丁字符,您应该没问题:

SELECT input, CASE
    WHEN UPPER(input) = LOWER(input) THEN TO_NUMBER(input)
    ELSE 0
END AS output
FROM source
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用该TRANSLATE功能:

SELECT input,
    CASE 
        WHEN TRANSLATE(CAST(input as CHAR(10)), '~~~~~~~~~~~~~', '0123456789-. ') = '~~~~~~~~~~' THEN CAST(input AS DECIMAL(12, 2))
        ELSE 0
    END AS num
FROM x
Run Code Online (Sandbox Code Playgroud)

  • 这种方法会不正确地接受包含标点符号的字符串. (2认同)