Sql 如何匹配在任何位置都不包含数字的数据
如果我的列有John1,John,Jo1hn,1John..我必须编写一个只提取John的查询,即在任何地方都没有数字 我已经尝试了多个类似regexp_的选项,下面的查询很接近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
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