我们在临时表中加载的供应商数据相当脏.一列特别捕获数字数据,但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)
| 归档时间: |
|
| 查看次数: |
20131 次 |
| 最近记录: |