我在数据库中有一个表(x),在数据类型varchar中有一个列(y)。此列包含值,如1,2,。,5,等等。
我正在尝试替换列中具有特殊字符的所有值,除了点之后具有值的值。
例如:我不想替换2.3,4.5,7.1之类的值。
如果dot之后没有值或者以dot开头的值我想用null替换dot。
例如:
我尝试了以下脚本,但它没有工作
update <table_name>
set <column_name> = regexp_replace(regexp_replace(column_name, '[^A-Z0-9 ]', '.'),
' {2,}', ' ')
/
请帮忙。
我正在使用Oracle 11g DB。
答案 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