1

我想创建一个查询,在其中选择所有包含a-zA-Z不允许字符串的字符的记录'NA'

select *
  from tz_customers c 
 where REGEXP_LIKE(c.customercode,'^NA');

REGEXP_LIKE允许除 STRING 以外的所有字符'NA'

4

3 回答 3

2

我可能会使用不等式比较来排除NA

SELECT *
FROM tz_customers
WHERE
    REGEXP_LIKE(customercode, '^[A-Za-z]+$') AND
    customercode <> 'NA';

原则上,我们可以尝试在单个正则表达式模式中使用负前瞻来排除NA,但我不确定 Oracle 正则表达式是否支持。

于 2019-09-12T13:25:55.947 回答
0

我认为您不需要 regexp_like:

  select * from tz_customers where customer_code not like '%NA%'
于 2019-09-12T13:34:22.320 回答
0

如果您想要不以 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<>在这里摆弄

于 2019-09-12T13:29:04.787 回答