Sql 如何匹配在任何位置都不包含数字的数据

Sql 如何匹配在任何位置都不包含数字的数据,sql,oracle,Sql,Oracle,如果我的列有John1,John,Jo1hn,1John..我必须编写一个只提取John的查询,即在任何地方都没有数字 我已经尝试了多个类似regexp_的选项,下面的查询很接近 select * from table where regexp_like(column,'[^[:digit:]]+$'); 但它只是删除了最后一个字符为1的John1,而不是其他字符 如果问题不清楚,请告诉我。提前谢谢 让我们这样试试: SQL> with t1(col) as( 2 selec

如果我的列有John1,John,Jo1hn,1John..我必须编写一个只提取John的查询,即在任何地方都没有数字

我已经尝试了多个类似regexp_的选项,下面的查询很接近

select * from table where  regexp_like(column,'[^[:digit:]]+$');
但它只是删除了最后一个字符为1的John1,而不是其他字符

如果问题不清楚,请告诉我。提前谢谢

让我们这样试试:

SQL> with t1(col) as(
  2    select 'John1' from dual union all
  3    select 'John'  from dual union all
  4    select 'Jo1hn'  from dual union all
  5    select '1John' from dual
  6  )
  7  select *
  8    from t1
  9  where regexp_like(col, '^[^[:digit:]]+$')
 10  ;

COL
-----
John


您也可以使用
而不是

SQL> SELECT *
  2    FROM (SELECT 'John1' txt FROM dual
  3          UNION ALL
  4          SELECT 'John' FROM dual
  5          UNION ALL
  6          SELECT 'Jo1hn' FROM dual
  7          UNION ALL
  8          SELECT '1John' FROM dual)
  9   WHERE NOT regexp_like(txt, '[[:digit:]]');

TXT
----
John

这就像魅力尼古拉斯!因此,添加“^”以指示字符串的开头解决了它。我错过了它@user841311外部插入符号匹配字符串的开头,内部插入符号否定(第一次查询)数字类
SQL> SELECT *
  2    FROM (SELECT 'John1' txt FROM dual
  3          UNION ALL
  4          SELECT 'John' FROM dual
  5          UNION ALL
  6          SELECT 'Jo1hn' FROM dual
  7          UNION ALL
  8          SELECT '1John' FROM dual)
  9   WHERE NOT regexp_like(txt, '[[:digit:]]');

TXT
----
John