我有一个表格中的一列,其中包含带附加字符串的特殊字符。同一列还包含数字。我只对从该列中提取数字感兴趣,例如:
Name-3445 => 3445; Out-90 => 90; 786 => 786
我该如何在SQL或PL/SQL中实现这个功能?
SELECT regexp_replace(some_column, '[^0-9]*', '') as clean_value
FROM your_table
PL/SQL有一个REGEX_REPLACE函数,您可以使用它来将任何非数字的内容替换为空字符串。关于REGEX_REPLACE的详细信息可以在这里找到:http://psoug.org/reference/regexp.html
如果不知道您的数据的完整性,可以尝试以下代码:
select CAST(SUBSTRING(_COLUMNNAME_,CHARINDEX('-', _COLUMNNAME_),1000), Integer) as ColumnName
from tblTable where _COLUMNNAME_ like '%-%'
union all select CAST(_COLUMNNAME, Integer) as ColumnName
from tblTable where _COLUMNNAME_ not like '%-%'
REGEXP_REPLACE(<Your_String>,'[^[:alnum:]'' '']', NULL)
例子:
SELECT REGEXP_REPLACE('##$$$123&&!!__!','[^[:alnum:]'' '']', NULL) FROM dual;
输出:
123
'[^0-9]+'
而不是*
。 - WBAR