Oracle数据库如何筛选列中含'demo'后跟数字的记录
正确的Oracle查询方法
原语句select * from table where NAME like 'demo';仅会匹配NAME完全等于'demo'的记录(即ID=3的条目),无法筛选出'demo'后跟随数字的目标记录(ID=1、2),以下是两种可行的解决方案:
方法1:使用正则表达式函数REGEXP_LIKE
Oracle原生支持REGEXP_LIKE进行正则匹配,可精准匹配以'demo'开头且后续至少包含一个数字的字符串:
SELECT * FROM table WHERE REGEXP_LIKE(NAME, '^demo[0-9]+$');
^demo:限定字符串以'demo'开头[0-9]+:匹配至少一个阿拉伯数字$:限定字符串结尾为数字,确保'demo'后仅存在数字(若需允许数字后还有其他字符,可删除$)
若需匹配'demo'后带有数字、且数字后可包含任意内容的记录,可修改为:
SELECT * FROM table WHERE REGEXP_LIKE(NAME, '^demo[0-9]');
方法2:结合LIKE与TRANSLATE函数(兼容旧版本Oracle)
如果你的Oracle版本不支持正则函数,可通过字符串处理函数实现:
SELECT * FROM table WHERE NAME LIKE 'demo%' AND TRANSLATE(SUBSTR(NAME, LENGTH('demo') + 1), '0123456789', '##########') IS NOT NULL;
NAME LIKE 'demo%':先筛选所有以'demo'开头的记录SUBSTR(NAME, LENGTH('demo') + 1):截取'demo'之后的子字符串TRANSLATE(...) IS NOT NULL:将截取到的子串中的数字替换为#,若结果不为空则说明原字符串'demo'后存在数字
测试结果
针对你提供的测试数据,上述两种方法都会返回以下结果:
ID NAME ------------ 1 demo20 2 demo26
内容的提问来源于stack exchange,提问作者Kane
相关产品推荐
相关产品推荐

