Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Oracle varchar字符串替换_String_Oracle - Fatal编程技术网

String Oracle varchar字符串替换

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

我在数据库中有一个表(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(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。在某些值的数据迁移过程中,在数字之前添加点。是,我想删除所有特殊字符。字符串中没有字母。我没有任何两个小数点字符串符号也应替换为空值。