如何从列中仅提取编号的行

时间:2013-08-13 17:50:55

标签: sql plsql chars

例如:我有一个名为“Card No”的列,它是一个varchar,但大多数行包含数字,很少有包含字母数字的数字。我想忽略所有不是数字的记录。

下面是一些相同的例子:

Select CardNo from XX;

结果:

CardNo:
_______
1234,
5467,
1234/5467,
abc 667,
efg428

在上面的结果集中,我想消除最后三个值。请指教。

4 个答案:

答案 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