0

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

下面是几个相同的例子:

Select CardNo from XX;

结果:

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

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

4

4 回答 4

2
Select CardNo from XX
where translate(CardNo, ' 0123456789', ' ') is null
于 2013-08-13T18:18:59.677 回答
1

Oracle 10+ 有一个您可以使用的正则表达式系统。如您所知,没有索引可以或将用于这种类型的比较。Oracle 将需要查看每一行。

看看http://docs.oracle.com/cd/B12037_01/server.101/b10759/functions114.htm#SQLRF06300

就像是:

WHERE REGEXP_INSTR('CardNo', '[^0-9]+') > 0
于 2013-08-13T18:05:23.693 回答
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() 函数中的第二个参数将允许您包含所需的任何字符。

于 2013-08-13T18:17:16.730 回答
0

从 XX 中选择 CardNo,其中 isNumeric(CardNo) = 1

于 2013-08-13T18:42:32.453 回答