以下包含REGEXP_LIKE()的SQL查询之间有什么区别?
我试图找到员工的名字,但不是以元音开头和结尾。我提出了上述问题。现在我有两个问题:以下包含REGEXP_LIKE()的SQL查询之间有什么区别?,sql,oracle11g,regexp-like,Sql,Oracle11g,Regexp Like,我试图找到员工的名字,但不是以元音开头和结尾。我提出了上述问题。现在我有两个问题: 上述语句是否返回有效的输出(不以元音开头) 上述语句是否总是返回相同的结果(我尝试时得到相同的结果) 但当我尝试下面两个查询时,它们给出了彼此不同的输出 select distinct first_name from EMPLOYEES where regexp_like(first_name,'^[^AEIOU]*[^aeiou]$'); select distinct first_name f
select distinct first_name
from EMPLOYEES
where regexp_like(first_name,'^[^AEIOU]*[^aeiou]$');
select distinct first_name
from EMPLOYEES
where regexp_like(first_name,'^[^AEIOU].*[^aeiou]$');
1) 前两个查询没有提供有效的输出。它们匹配以小写元音开头或以大写元音结尾的名称。而且他们也不总是给出相同的结果:
- 马科斯是第一和第二的对手
- 马科斯是第二个对手,而不是第一个
- 艾伦是两者的对手
你可以自己试试:请澄清你的第二个问题,因为你自相矛盾。你得到了相同的结果,但得到了不同的结果?上面的问题给了彼此相同的结果,下面的问题给了彼此不同的结果,这就是我感到困惑的地方-我能说的两组查询完全相同。如果有细微的差异,请突出显示。也就是说,我会注意到,
^[^AEIOU]*[^AEIOU]$
和^[AEIOU].[AEIOU]$
将给出不同的结果。不同之处在于中间的*
运算符适用于什么。注释如果您的意思是前两个查询给出不同的答案“相互尊重”。如果名称总是以大写字母开头会怎么样。该查询有效吗?我不明白您的观点什么是marcos,什么是allan?是的,Rahul,如果您可以强制名称始终以大写字母开头,并始终以小写字母结尾,则查询是有效的。“allan”是一个名称示例,如果您不强制大写字母,它将证明您的查询是错误的。对于第二个问题,在第一个查询中,星形运算符(零或更多)应用于[AEIOU],而在第二个查询中,星形运算符应用于“.”(点-任意字符)。
select distinct first_name
from EMPLOYEES
where regexp_like(first_name,'^[AEIOU]*[aeiou]$');
select distinct first_name
from EMPLOYEES
where regexp_like(first_name,'^[AEIOU].*[aeiou]$');