例如:我有一个名为“Card No”的列,它是一个 varchar,但大多数行包含数字,很少包含字母数字。我想忽略所有不是数字的记录。
下面是几个相同的例子:
Select CardNo from XX;
结果:
CardNo:
_______
1234,
5467,
1234/5467,
abc 667,
efg428
在上面的结果集中,我想消除最后三个值。请指教。
Select CardNo from XX
where translate(CardNo, ' 0123456789', ' ') is null
Oracle 10+ 有一个您可以使用的正则表达式系统。如您所知,没有索引可以或将用于这种类型的比较。Oracle 将需要查看每一行。
看看http://docs.oracle.com/cd/B12037_01/server.101/b10759/functions114.htm#SQLRF06300
就像是:
WHERE REGEXP_INSTR('CardNo', '[^0-9]+') > 0
在这里使用正则表达式可能是最好的选择,但如果你不想走这条路,你可以这样做:
select CLEANED_CARDNO
from (select CARDNO CLEANED_CARDNO,
replace(TRANSLATE(CARDNO, '0123456789/', '~'), '~', null) STATUS
from (select CARDNO from XX))
where STATUS is null;
更改 TRANSLATE() 函数中的第二个参数将允许您包含所需的任何字符。
从 XX 中选择 CardNo,其中 isNumeric(CardNo) = 1