oracle电话号码格式reg exp在错误数据中
我在检查完这个主题后来到这里: 我的主要问题是,我有错误的迁移数据,需要修复。 对于电话号码,我们有一些字母和特殊字符需要删除 例如,设想以下数据:oracle电话号码格式reg exp在错误数据中,oracle,phone-number,regexp-substr,Oracle,Phone Number,Regexp Substr,我在检查完这个主题后来到这里: 我的主要问题是,我有错误的迁移数据,需要修复。 对于电话号码,我们有一些字母和特殊字符需要删除 例如,设想以下数据: s#sdads+#09232342a 我只想得到+和数字 +必须是可选的 如果我阅读了oracle的文档,这应该很容易,但我不能让它工作,我一定缺少一些基本的东西。 有什么想法吗 下面是我尝试过的一些例子: select regexp_substr('s#sdads+#09232342a','\+*[0-9]+') from dual;
s#sdads+#09232342a
我只想得到+和数字
+必须是可选的
如果我阅读了oracle的文档,这应该很容易,但我不能让它工作,我一定缺少一些基本的东西。
有什么想法吗
下面是我尝试过的一些例子:
select regexp_substr('s#sdads+#09232342a','\+*[0-9]+') from dual;
返回
09232342
我希望它能考虑+。
我还尝试将+放在测试字符串的开头,没有区别。
将regexp更改为
[\+]*[0-9]+ or [+]*[0-9]+ or (\+)*(\d)+
结果没有差别
让我困惑的是,如果我更改测试字符串和regexp,它将返回+并且只返回加号
select regexp_substr('+s#sdads+#09232342a','?[\+]*') from dual;
但是如果我把+移出开头,它就消失了
此外,如果我将数字放在那里,则只考虑数字:
select regexp_substr('+s#sdads+#09232342a','?[\+]*(\d)+') from dual;
这也不起作用:
select regexp_substr('+s#sdads+#09232342a','?[\+]{0,1}(\d)+') from dual;
在+
和需要说明的数字之间有一个#
字符:
查询1-替换所有不需要的字符:
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '[^+0-9]' )
FROM DUAL
++09232342
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '^.*?(\+?)#(\d+).*$', '\1\2' )
FROM DUAL
+09232342
SELECT REGEXP_SUBSTR( '+s#sdads+#09232342a', '\+?#\d+' )
FROM DUAL
+#09232342
输出:
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '[^+0-9]' )
FROM DUAL
++09232342
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '^.*?(\+?)#(\d+).*$', '\1\2' )
FROM DUAL
+09232342
SELECT REGEXP_SUBSTR( '+s#sdads+#09232342a', '\+?#\d+' )
FROM DUAL
+#09232342
查询2-匹配整个字符串:
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '[^+0-9]' )
FROM DUAL
++09232342
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '^.*?(\+?)#(\d+).*$', '\1\2' )
FROM DUAL
+09232342
SELECT REGEXP_SUBSTR( '+s#sdads+#09232342a', '\+?#\d+' )
FROM DUAL
+#09232342
输出:
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '[^+0-9]' )
FROM DUAL
++09232342
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '^.*?(\+?)#(\d+).*$', '\1\2' )
FROM DUAL
+09232342
SELECT REGEXP_SUBSTR( '+s#sdads+#09232342a', '\+?#\d+' )
FROM DUAL
+#09232342
查询3-匹配子字符串:
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '[^+0-9]' )
FROM DUAL
++09232342
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '^.*?(\+?)#(\d+).*$', '\1\2' )
FROM DUAL
+09232342
SELECT REGEXP_SUBSTR( '+s#sdads+#09232342a', '\+?#\d+' )
FROM DUAL
+#09232342
(然后可以通过将该语句包装到另一个replace中来替换无关的#
)
输出:
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '[^+0-9]' )
FROM DUAL
++09232342
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '^.*?(\+?)#(\d+).*$', '\1\2' )
FROM DUAL
+09232342
SELECT REGEXP_SUBSTR( '+s#sdads+#09232342a', '\+?#\d+' )
FROM DUAL
+#09232342
在+
和需要说明的数字之间有一个#
字符:
查询1-替换所有不需要的字符:
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '[^+0-9]' )
FROM DUAL
++09232342
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '^.*?(\+?)#(\d+).*$', '\1\2' )
FROM DUAL
+09232342
SELECT REGEXP_SUBSTR( '+s#sdads+#09232342a', '\+?#\d+' )
FROM DUAL
+#09232342
输出:
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '[^+0-9]' )
FROM DUAL
++09232342
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '^.*?(\+?)#(\d+).*$', '\1\2' )
FROM DUAL
+09232342
SELECT REGEXP_SUBSTR( '+s#sdads+#09232342a', '\+?#\d+' )
FROM DUAL
+#09232342
查询2-匹配整个字符串:
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '[^+0-9]' )
FROM DUAL
++09232342
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '^.*?(\+?)#(\d+).*$', '\1\2' )
FROM DUAL
+09232342
SELECT REGEXP_SUBSTR( '+s#sdads+#09232342a', '\+?#\d+' )
FROM DUAL
+#09232342
输出:
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '[^+0-9]' )
FROM DUAL
++09232342
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '^.*?(\+?)#(\d+).*$', '\1\2' )
FROM DUAL
+09232342
SELECT REGEXP_SUBSTR( '+s#sdads+#09232342a', '\+?#\d+' )
FROM DUAL
+#09232342
查询3-匹配子字符串:
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '[^+0-9]' )
FROM DUAL
++09232342
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '^.*?(\+?)#(\d+).*$', '\1\2' )
FROM DUAL
+09232342
SELECT REGEXP_SUBSTR( '+s#sdads+#09232342a', '\+?#\d+' )
FROM DUAL
+#09232342
(然后可以通过将该语句包装到另一个replace中来替换无关的#
)
输出:
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '[^+0-9]' )
FROM DUAL
++09232342
SELECT REGEXP_REPLACE( '+s#sdads+#09232342a', '^.*?(\+?)#(\d+).*$', '\1\2' )
FROM DUAL
+09232342
SELECT REGEXP_SUBSTR( '+s#sdads+#09232342a', '\+?#\d+' )
FROM DUAL
+#09232342
问题是,在所有的尝试中,您都在寻找+后跟数字。像这样的方法应该会奏效:
select regexp_substr('+s#sdads+#09232342a', '\+') ||
regexp_substr('+s#sdads+#09232342a', '\d+') from dual;
问题是,在所有的尝试中,您都在寻找+后跟数字。像这样的方法应该会奏效:
select regexp_substr('+s#sdads+#09232342a', '\+') ||
regexp_substr('+s#sdads+#09232342a', '\d+') from dual;
它已经修好了,谢谢大家。它已经修好了,谢谢大家