尽管检查不包含空白记录,但仍会检索到空白记录?

时间:2017-09-29 10:24:13

标签: sql oracle

Select 'Total schools' As Title, Count(1) As Total_Count
From (Select Distinct School_Name, Indv_Id
      From D_Education D 
      where Regexp_Like(School_Name,'[^A-Za-z0-9, -./]+')
     );

此查询返回大约100个不同的学校名称。

由此返回的大多数记录都有特殊字符,如?,\或空格​​。我的问题是,为什么在检查排除空格的情况下会恢复空白空间记录。多卡斯广场 - 这样的记录即将到来。

感谢任何帮助:)

1 个答案:

答案 0 :(得分:4)

这个表达式:

  where Regexp_Like(School_Name, '[^A-Za-z0-9, -./]+')

只需要名单中不包含列表中中的至少一个字符。

如果您想要具有特殊字符的名称,可能就是您想要的:

  where not Regexp_Like(School_Name, '^[A-Za-z0-9, -./]$')

这是检查名称中的所有字符是否有效。 ^$是正则表达式中的锚点。它们要求整个字符串与模式匹配。

编辑:

要允许单引号,您可以这样做:

  where not Regexp_Like(School_Name, '^[A-Za-z0-9, -./'']$')

您需要将单引号加倍,因为它是字符串的分隔符。