SQL如何检查变量是否包含非整数字符并删除非整数字符

时间:2013-05-04 07:24:03

标签: sql oracle

我正在尝试检查变量'prodno'是否包含任何非整数字符。 如果是,则删除非整数字符。

-- Expected output:

prodno A18
prodno K67


drop table ass3_product cascade constraints;
create table ass3_product (
prodno varchar2(30) primary key,
prodname varchar2(30),
purchasecost number(6,2)
);
insert into ass3_product values ('23','Prod One', 10);
insert into ass3_product values ('54','Prod Two', 50);
insert into ass3_product values ('A18','Prod Three', 35);
insert into ass3_product values ('9','Prod Four', 4);
insert into ass3_product values ('K67','Prod Five', 15);

SELECT prodno
FROM ass3_product
WHERE prodno like '%[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]%';

1 个答案:

答案 0 :(得分:2)

您似乎认为

LIKE不支持范围 - 它仅支持使用%_进行通配符搜索。您需要为此

使用正则表达式

要删除非整数值,请使用regexp_replace

SELECT regexp_replace(prodno, '\D', '')
FROM ass3_product

要测试此条件,您可以将替换结果与原始值进行比较:

SELECT regexp_replace(prodno, '\D', '')
FROM ass3_product
WHERE prodno <> regexp_replace(prodno, '\D', '');

另一种可能性是使用regexp_like。以下将选择prodno不以数字开头的所有行:

SELECT regexp_replace(prodno, '\D', '')
FROM ass3_product
where regexp_like(prodno, '^[^0-9]+')