我开始对REGEXP_LIKE功能进行一些研究,这是我在oracle网站上发现的:
REGEXP_LIKE类似于LIKE条件,除了REGEXP_LIKE执行常规>表达式匹配而不是LIKE执行的简单模式匹配
所以,我试着比较两者:
1)LIKE如果我们拥有%并_可以使用;
所以,我跑:
SELECT 'true'
FROM dual
WHERE 'true' like '%ru_';
Run Code Online (Sandbox Code Playgroud)
我会按预期在输出中得到"真实";
2)在REGEXP案例中,如果我运行:
SELECT 'true'
FROM dual WHERE REGEXP_LIKE('true', '[[:alpha:]]');
Run Code Online (Sandbox Code Playgroud)
要么
SELECT 'true'
FROM dual WHERE REGEXP_LIKE('true', 'u');
Run Code Online (Sandbox Code Playgroud)
在任何一种情况下,我都会在结果集中得到"真实".我希望regexp_like根据regexp匹配整个字符串,而不是只匹配给定示例中的一个字符;
我也希望以此为例
SELECT 'true'
FROM dual WHERE REGEXP_LIKE('true', '[[:alpha:]]');
Run Code Online (Sandbox Code Playgroud)
成为
SELECT 'true'
FROM dual
WHERE REGEXP_LIKE('true', '[[:alpha:]]+');
Run Code Online (Sandbox Code Playgroud)
这意味着[[:alpha:]]可以多次应用令牌,这将与reg exp匹配.如果没有+或*,[[:alpha:]]令牌只匹配一个只有"t"的字符,并且由于只需要一个匹配,它将不再匹配失败匹配的任何字符.
对我来说这是一种奇怪的行为.如果我错了,请纠正我.谢谢.
编辑:附加说明:
为什么我首先开始研究它的问题是确保名字不包含任何数字,但只是字母和练习考试会给出以下答案:
A.
ALTER TABLE CUSTOMERS ADD CONSTRAINT cust_f_name CHECK(REGEXP_LIKE(cust_first_name, '^A-Z'))NOVALIDATE; …Run Code Online (Sandbox Code Playgroud)