以下是我的代码
select (upper(fname)||' '||upper(mname)||' '||upper(lname)) as customer_name,
(indv_corp_flag) as Customer_type,
(regexp_replace(passport_no,'D','B')"regexp_replace") as passport_no,
(case when indv_corp_flag = 'C' then registration_no else null end) as registration_no,
(case when indv_corp_flag = 'I' then marital_status else null end) as Marital_status
from Nbfc_krishnan_m;
它给出了错误,如
ORA-00907: missing right parenthesis
00907. 00000 - "missing right parenthesis"
*Cause:
*Action:
Error at Line: 91 Column: 38
但是在单独操作时,它就像
一样select
regexp_replace(passport_no,'S','d')"regexp_replace"
from nbfc_krishnan_m;
成功执行。
答案 0 :(得分:2)
您已将投影的所有列包装在不必要的括号中。它会编译,但杂乱无法阻止您看到问题。没有这些括号,很明显你有一个包含两个别名的列:
regexp_replace(passport_no,'D','B')"regexp_replace" as passport_no
您发布了一个有效的查询。它的工作原理是因为它只有一个别名。因此解决方案很明显:
select upper(fname)||' '||upper(mname)||' '||upper(lname) as customer_name,
indv_corp_flag as Customer_type,
regexp_replace(passport_no,'D','B') as passport_no,
case when indv_corp_flag = 'C' then registration_no else null end as registration_no,
case when indv_corp_flag = 'I' then marital_status else null end as Marital_status
from Nbfc_krishnan_m;
在将来的实际需要它们的表达式的保留括号中。
"如果字符串是DCCFF12996,我希望输出为BCCFF12669"
您只是将一个字符替换为另一个字符,因此您应该使用标准TRANSLATE()函数。只在需要正则表达式(即模式)时才使用REGEXP_REPLACE()。
SQL> select upper(fname||' '||mname||' '||lname) as customer_name,
2 passport_no,
3 translate(passport_no,'D69','B96') as new_passport_no
4 from Nbfc_krishnan_m;
CUSTOMER_NAME PASSPORT_N NEW_PASSPO
--------------------------------- ---------- ----------
FOX IN SOCKS ABCD123 ABCB123
DAISY HEAD MAYZIE DCCFF12996 BCCFF12669
SQL>