例如:我有一个名为“Card No”的列,它是一个varchar,但大多数行包含数字,很少有包含字母数字的数字。我想忽略所有不是数字的记录。
下面是一些相同的例子:
Select CardNo from XX;
结果:
CardNo:
_______
1234,
5467,
1234/5467,
abc 667,
efg428
在上面的结果集中,我想消除最后三个值。请指教。
答案 0 :(得分:2)
Select CardNo from XX
where translate(CardNo, ' 0123456789', ' ') is null
答案 1 :(得分:1)
Oracle 10+有一个可以使用的正则表达式系统。您知道,没有索引可用于或将用于此类比较。 Oracle需要查看每一行。
查看http://docs.oracle.com/cd/B12037_01/server.101/b10759/functions114.htm#SQLRF06300
类似的东西:
WHERE REGEXP_INSTR('CardNo', '[^0-9]+') > 0
答案 2 :(得分: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()函数中的第二个参数将允许您包含所需的任何字符。
答案 3 :(得分:0)
从XX中选择CardNo,其中isNumeric(CardNo)= 1