从字符串中删除所有元音 - PL / SQL

时间:2015-02-20 14:59:46

标签: sql oracle plsql

我有这个家庭作业:

 Write an anonymous PL/SQL block that accepts a string as input and removes all of the vowels (a.e.i.o.u) from the string, then outputs the results.

 The output should look like this:

 Run the Program

 SQL>@rm_vowels

 Enter the String: A penny for your thoughts

 SQL>****************************

 SQL>The new string is: pnny fr yr thghts

这看起来确实很容易,但我真的缺乏一些PL / SQL经验来完成这项工作。

从我的搜索到目前为止,我已经意识到我需要使用类似的东西:

REGEXP_REPLACE(name,'[a,e,i,o,u,A,E,I,O,U]','')

对吗?

4 个答案:

答案 0 :(得分:3)

你也可以使用translate函数,它可能比regexp_replace快一点:

select translate('A penny for your thoughts', 'xaeiouAEIOU', 'x') new_str from dual;

NEW_STR           
------------------
 pnny fr yr thghts

您可能希望修剪一下以删除任何前导/尾随空格。

答案 1 :(得分:1)

是的,这个函数调用应该可以解决问题:

SELECT REGEXP_REPLACE('A penny for your thoughts','[a,e,i,o,u,A,E,I,O,U]','')
FROM   dual;

答案 2 :(得分:1)

您可以使用REGEXP_REPLACE()(虽然您在角色课程中肯定不需要逗号 - 但您不需要替换任何内容):

SELECT REGEXP_REPLACE('A penny for your thoughts','[aeiouAEIOU]')
  FROM dual;

您还可以使用以下使用正则表达式更有效的方法(也可以在Oracle 9i或更低版本中使用):

SELECT TRANSLATE('A penny for your thoughts', 'AEIOUaeiou', ' ')
  FROM dual

答案 3 :(得分:1)

从技术上讲,该赋值需要一个匿名的pl / sql块,并提示用户输入。所以你有类似的东西:

set serveroutput on
set verify off

accept vstring prompt "Please enter your string: ";
declare
   vnewstring varchar2(100);
begin
   vnewstring := regexp_replace('&vstring', '[aeiouAEIOU]','');
   dbms_output.put_line('The new string is: ' || vnewstring);
end;
/

你可以将它放在名为" my_homework_from_SO.sql"的文件中。并从文件所在的同一目录中,登录到sqlplus并运行它:

@ my_homework_from_SO.sql

Please enter your string: This is a test
The new string is: Ths s  tst

PL/SQL procedure successfully completed.