2013-05-04 75 views
0

我试图检查变量'prodno'是否包含任何非整数字符。 如果有,则删除非整数字符。SQL如何检查变量是否包含非整数字符并删除非整数字符

-- 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]%'; 

回答

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]+') 
+0

非常感谢! – 2013-05-05 06:04:09

相关问题