以下包含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) 前两个查询没有提供有效的输出。它们匹配以小写元音开头或以大写元音结尾的名称。而且他们也不总是给出相同的结果:

    • 马科斯是第一和第二的对手
    • 马科斯是第二个对手,而不是第一个
    • 艾伦是两者的对手
    2) 出于类似的原因,第二对显示不同的输出


    你可以自己试试:

    请澄清你的第二个问题,因为你自相矛盾。你得到了相同的结果,但得到了不同的结果?上面的问题给了彼此相同的结果,下面的问题给了彼此不同的结果,这就是我感到困惑的地方-我能说的两组查询完全相同。如果有细微的差异,请突出显示。也就是说,我会注意到,
    ^[^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]$');