从oracle中的列中删除E9和十进制

时间:2018-01-19 09:13:07

标签: oracle

我有很多记录,在oracle表中上传excel时,其数据上传错误。部分结果如下

8.632233817E9, 8.63227224E9, 8.819243113E9

所以现在我想要的是删除E9,它是每个值的最后一个,也是小数。

注意我不想删除9,如果它出现在任何数字的中间。

其查询是

select STORE_SITENAME_LANDL_2, RRSOC_ID from TBL_RRSOC_STORE_INFO;

其中RRSOC_ID是我的主键值

2 个答案:

答案 0 :(得分:0)

如果您希望从此类数据中删除E9,则只需使用

即可
select 
  replace(STORE_SITENAME_LANDL_2, 'E9'),
  replace(RRSOC_ID, 'E9'),
  replace(STORE_CODE, 'E9')
from 
  TBL_RRSOC_STORE_INFO;

但你真的希望你说的话吗?也许

select 
  to_number(STORE_SITENAME_LANDL_2, '9.999999999999999EEEE'),
  to_number(RRSOC_ID, '9.999999999999999EEEE'),
  to_number(STORE_CODE, '9.999999999999999EEEE')
from 
  TBL_RRSOC_STORE_INFO;

你真的需要什么?

答案 1 :(得分:0)

由于8.819243113E9只是您8819243113的另一种撰写方式,如您对请求的评论中所述,只需将您的字符串转换为数字:

update mytable
set col = to_number(col, '9.9999999999999999999EEEE')
WHERE col LIKE '_.%E%';

这也会处理像8.8192E9 8819200000(而不是88192这样的值,您可以通过自己的方法获得这些值,只需删除9E和小数分离器)。

但如前所述,您不应该在文本列中存储数字。将其设为数字​​列,不会出现此类错误。