oracle 我的Select有什么问题,使我的案例再次工作

g2ieeal7  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(94)

嗨,我的选择在这里不工作。有人能告诉我我的语法有什么问题吗?我想得到3列与不同的结果,从名称,上,下和initcap,但当名称博士。只有后面的三个字母是大写的。

select mitarbeitername,
    case 
    when regexp_like(mitarbeitername, '^Dr.*')  then  upper(substr(mitarbeitername,4))
    else upper(substr(mitarbeitername, 1,3))
     , lower(substr(mitarbeitername, 1,3) )
     , initcap(substr(mitarbeitername, 1,3)) 
    end Name   
from mitarbeiter;
bweufnob

bweufnob1#

我想得到3列与不同的结果,从名称,上,下和initcap,但当名称博士。只有后面的三个字母是大写的。
CASE表达式输出单个标量值;它不能**输出三个值。如果需要三个值,则使用三个CASE表达式:

SELECT mitarbeitername,
       CASE
       WHEN mitarbeitername LIKE 'Dr.%')
       THEN UPPER(SUBSTR(mitarbeitername,4))
       ELSE UPPER(SUBSTR(mitarbeitername, 1,3))
       END AS upper_name,
       CASE
       WHEN mitarbeitername LIKE 'Dr.%')
       THEN NULL
       ELSE LOWER(SUBSTR(mitarbeitername, 1,3))
       END AS lower_name,
       CASE
       WHEN mitarbeitername LIKE 'Dr.%')
       THEN NULL
       ELSE INITCAP(SUBSTR(mitarbeitername, 1,3))
       END AS initcap_name
FROM   mitarbeiter;
  • 注意:不需要使用正则表达式来匹配以Dr开头的字符串;你可以使用LIKE来执行一个简单的字符串比较,这样会快得多。如果你确实想使用正则表达式,那么你希望模式^Dr\.^Dr\..*作为未转义的.将匹配任何字符。

相关问题