您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

从varchar,Oracle PL / SQL中选择元音

从varchar,Oracle PL / SQL中选择元音

如果使用的是Oracle 11g,则可以使用REXEXP_COUNT函数确定与模式匹配的内容

sql> select regexp_count('andrew', '[aeIoU]', 1, 'i') as vowels
  2    from dual;

    VOWELS
----------
         2

一个参数是您要匹配的字符串'andrew'

第二个参数是匹配模式,在这种情况下为[aeIoU]。在[]表示一个字符列表; 解析器以任何顺序匹配此列表中的所有字符。

第三个参数,1是开始位置,指示Oracle应该在其中开始搜索匹配项的字符串的位置索引。它仅包含在内,因此我可以使用第四个参数。

第四个参数是match参数,'i'指示我要执行不区分大小写的匹配。这就是为什么字符列表 存在的原因[aeIoUAEIoU]

如果您使用的是10克,则REGEXP_COUNT不存在。在这种情况下,你可以使用更确切版本Annjawan的解决方案REGEXP_REPLACE

sql> select length(regexp_replace('andrew','[^aeIoU]', '', 1, 0, 'i')) as vowels
  2    from dual;

    VOWELS
----------
         2

克拉(^)表示不是,即用空字符串替换字符'andrew'列表中不在字符串中的每个字符[aeIoU]。下一个参数再次是起始位置。第五个参数0表示您要替换每次 匹配的模式,并且我再次使用match参数'i'表示不区分大小写的匹配。

Gaurav的答案不正确。这是因为在字符列表中,他包括了逗号。请记住,如果可用,字符列表中的所有内容 将匹配。因此,如果我在您的字符串中引入逗号,则您的字符串中将有3个“元音”:

sql> select regexp_count('an,drew','[a,e,i,o,u,A,E,I,O,U]' ) as vowels
  2    from dual;

    VOWELS
----------
         3

正则表达式不是简单的野兽,我会强烈建议你阅读的文档尝试他们的时候。

SQLServer 2022/1/1 18:52:47 有298人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶