如何忽略特殊字符并仅使用以下输入作为字符串获取数字。
输入:'33 -01-616-000' 输出应为3301616000
答案 0 :(得分:5)
使用REPLACE()
功能删除-
个字符。
REPLACE(columnname, '-', '')
或者,如果可以有其他非数字字符,您可以使用REGEXP_REPLACE()
删除任何不是数字的内容。
REGEXP_REPLACE(columnname, '\D', '')
答案 1 :(得分:0)
标准字符串函数(如REPLACE
,TRANSLATE
等)通常比正则表达式函数快得多(快一个数量级)。当然,这只有在您需要处理大量数据时才会很重要,并且/或者如果您没有那么多数据但是必须经常处理它。
这是使用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;
/