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

большое спасибо! –