获得唯一号码

时间:2018-04-04 21:27:26

标签: sql regex oracle

如何忽略特殊字符并仅使用以下输入作为字符串获取数字。

输入:'33 -01-616-000' 输出应为3301616000

4 个答案:

答案 0 :(得分:5)

使用REPLACE()功能删除-个字符。

REPLACE(columnname, '-', '')

或者,如果可以有其他非数字字符,您可以使用REGEXP_REPLACE()删除任何不是数字的内容。

REGEXP_REPLACE(columnname, '\D', '')

答案 1 :(得分:0)

标准字符串函数(如REPLACETRANSLATE等)通常比正则表达式函数快得多(快一个数量级)。当然,这只有在您需要处理大量数据时才会很重要,并且/或者如果您没有那么多数据但是必须经常处理它。

这是使用TRANSLATE解决此问题的一种方法,即使您事先并不知道 字符串中可能存在的其他字符 - 除了数字:

TRANSLATE(columnname, '0123456789' || columnname, '0123456789')

这将映射0到0,1到1等 - 以及输入字符串columnname中的所有其他字符为空(因此它们将被简单地删除)。请注意,在TRANSLATE映射中,只有第二个参数中第一次出现的字符很重要 - 任何其他映射(由于第二个参数中出现的相同字符不止一次)都会被忽略。

答案 2 :(得分:0)

您还可以使用REGEXP_REPLACE功能。请尝试下面的代码,

u8"\u00A9 2006 FooWorld"

答案 3 :(得分:-1)

SELECT regexp_replace('33-01-616-000','[^0-9]') digits_only FROM dual; 
/