我有这个家庭作业:
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]','')
对吗?
答案 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.