0

我正在尝试检查变量“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]%';
4

1 回答 1

2

LIKE不支持您似乎认为的范围-它仅支持使用%and进行通配符搜索_。您需要为此使用正则表达式

要删除非整数值,请使用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]+')
于 2013-05-04T12:51:28.383 回答