Oracle varchar字符串替换

时间:2017-12-20 21:51:57

标签: string oracle

我在数据库中有一个表(x),在数据类型varchar中有一个列(y)。此列包含值,如1,2,。,5,等等。

我正在尝试替换列中具有特殊字符的所有值,除了点之后具有值的值。

例如:我不想替换2.3,4.5,7.1之类的值。

如果dot之后没有值或者以dot开头的值我想用null替换dot。

例如:

  • 1。,2。应更换为1,2。
  • .1,.2也应该替换为1,2。

我尝试了以下脚本,但它没有工作

update <table_name> 
set <column_name> = regexp_replace(regexp_replace(column_name, '[^A-Z0-9 ]', '.'),
                                              ' {2,}', ' ')
/

请帮忙。

我正在使用Oracle 11g DB。

1 个答案:

答案 0 :(得分:2)

这是一种方法。首先,我们使用正则表达式函数删除除数字和句点之外的所有字符。然后我们将TRIM应用于结果,仅在它是第一个或最后一个字符时修剪(删除)句点。

WITH子句不是查询的一部分;它只是为我自己创建测试数据。只需使用查询(来自SELECT ...)和您的实际表名和列名。

with
  inputs ( str ) as (
    select '2.'   from dual union all
    select '-4.2' from dual union all
    select '3?*'  from dual union all
    select '32.'  from dual union all
    select '.3'   from dual union all
    select '5$8'  from dual
  )
select str, trim( '.' from regexp_replace(str, '[^0-9.]') ) as new_str
from   inputs
;

STR  NEW_STR
---- -------
2.   2   
-4.2 4.2 
3?*  3   
32.  32  
.3   3   
5$8  58