String Oracle varchar字符串替换
我在数据库中有一个表(x)和数据类型为varchar的列(y)。此列包括1等值,2 \、.5、2)、4.3等 我试图替换列中所有具有特殊字符的值,除了在点后有值的值 我不想替换像2.3、4.5、7.1这样的值 如果点后没有值或以点开头的值,我想用null替换点 例如:String Oracle varchar字符串替换,string,oracle,String,Oracle,我在数据库中有一个表(x)和数据类型为varchar的列(y)。此列包括1等值,2 \、.5、2)、4.3等 我试图替换列中所有具有特殊字符的值,除了在点后有值的值 我不想替换像2.3、4.5、7.1这样的值 如果点后没有值或以点开头的值,我想用null替换点 例如: 一,二。应替换为1、2 .1、.2也应替换为1、2 我尝试了下面的脚本,但没有成功 update <table_name> set <column_name> = regexp_replace(reg
- 一,二。应替换为1、2李>
- .1、.2也应替换为1、2
update <table_name>
set <column_name> = regexp_replace(regexp_replace(column_name, '[^A-Z0-9 ]', '.'),
' {2,}', ' ')
/
更新
set=regexp\u replace(regexp\u replace(列名“[^A-Z0-9]”,“.”),
' {2,}', ' ')
/
请帮忙
我正在使用Oracle 11g DB。这里有一种方法。首先,我们使用正则表达式函数删除除数字和句点以外的所有字符。然后我们对结果应用修剪,仅当句点是第一个或最后一个字符时才修剪(删除)句点 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
这里有一个方法。首先,我们使用正则表达式函数删除除数字和句点以外的所有字符。然后我们对结果应用修剪,仅当句点是第一个或最后一个字符时才修剪(删除)句点 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
我不明白。。。显示的字符串,
1,2\,.5,2],4.3
,是单个输入字符串(在单个行中)?结果必须是一个逗号分隔的数字列表,无论是整数还是小数?然后:我理解您为什么要将23.
替换为23
。但是,为什么要将.2
替换为2
,而不是0.2
?您是否知道.2
在许多国家是0.2
的常见变体?请确认如您所说,您确实希望将.2
替换为2
,并且您不会回来更改问题陈述。因此-除了小数点之外,您希望删除逗号之间的所有特殊字符吗?字符串中是否有字母,如果有,您需要如何处理它们?然后-如果输入字符串中有类似于…,32.9.2,…
的内容,该怎么办?(两个小数点?)符号,2.怎么样,30美元,+12.5,-42.23
?这些需要如何处理?@mathguy字符串不是单个输入字符串。我提到的每个字符串都是一行中的新值。我尝试将.2替换为2而不是0.2的原因是实际值为2。在某些值的数据迁移过程中,在数字之前添加点。是,我想删除所有特殊字符。字符串中没有字母。我没有任何两个小数点字符串符号也应该替换为空值。我不明白。。。显示的字符串,1,2\,.5,2],4.3
,是单个输入字符串(在单个行中)?结果必须是一个逗号分隔的数字列表,无论是整数还是小数?然后:我理解您为什么要将23.
替换为23
。但是,为什么要将.2
替换为2
,而不是0.2
?您是否知道.2
在许多国家是0.2
的常见变体?请确认如您所说,您确实希望将.2
替换为2
,并且您不会回来更改问题陈述。因此-除了小数点之外,您希望删除逗号之间的所有特殊字符吗?字符串中是否有字母,如果有,您需要如何处理它们?然后-如果输入字符串中有类似于…,32.9.2,…
的内容,该怎么办?(两个小数点?)符号,2.怎么样,30美元,+12.5,-42.23
?这些需要如何处理?@mathguy字符串不是单个输入字符串。我提到的每个字符串都是一行中的新值。我尝试将.2替换为2而不是0.2的原因是实际值为2。在某些值的数据迁移过程中,在数字之前添加点。是,我想删除所有特殊字符。字符串中没有字母。我没有任何两个小数点字符串符号也应替换为空值。