我想创建一个查询,在其中选择所有包含a-z
或A-Z
不允许字符串的字符的记录'NA'
select *
from tz_customers c
where REGEXP_LIKE(c.customercode,'^NA');
REGEXP_LIKE
允许除 STRING 以外的所有字符'NA'
我想创建一个查询,在其中选择所有包含a-z
或A-Z
不允许字符串的字符的记录'NA'
select *
from tz_customers c
where REGEXP_LIKE(c.customercode,'^NA');
REGEXP_LIKE
允许除 STRING 以外的所有字符'NA'
我可能会使用不等式比较来排除NA
:
SELECT *
FROM tz_customers
WHERE
REGEXP_LIKE(customercode, '^[A-Za-z]+$') AND
customercode <> 'NA';
原则上,我们可以尝试在单个正则表达式模式中使用负前瞻来排除NA
,但我不确定 Oracle 正则表达式是否支持。
我认为您不需要 regexp_like:
select * from tz_customers where customer_code not like '%NA%'
如果您想要不以 witn 开头的字符串,NA
则:
SELECT *
FROM tz_customers c
WHERE c.customercode NOT LIKE 'NA%'
如果你想要不包含NA
任何地方的字符串,那么:
SELECT *
FROM tz_customers c
WHERE c.customercode NOT LIKE '%NA%'
如果您想要不完全正确的字符串NA
:
SELECT *
FROM tz_customers c
WHERE c.customercode <> 'NA'
如果您想要只有字母字符的字符串,那么您可以使用TRANSLATE
剥离允许的字符并测试剩余的字符串是否为空(NULL
):
SELECT *
FROM tz_customers c
WHERE TRANSLATE(
c.customercode,
'1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
'1'
) IS NULL
如果你想将两者结合起来:
SELECT *
FROM tz_customers c
WHERE TRANSLATE(
c.customercode,
'1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
'1'
) IS NULL
AND c.customercode <> 'NA'
所以对于样本数据:
CREATE TABLE tz_customers ( customercode ) AS
SELECT 'NA' FROM DUAL UNION ALL
SELECT 'BANANA' FROM DUAL UNION ALL
SELECT 'BANANA2' FROM DUAL;
这输出:
| 客户代码 | | :----------- | | 香蕉 |
db<>在这里摆弄