2013-05-04 3 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

대단히 감사합니다! –

관련 문제