我的选择有什么问题,以便我的案例再次有效

问题描述 投票:0回答:1

嗨,我在这里的选择不起作用。有人能告诉我我的语法有什么问题吗?我想从名称、upper、lower 和 initcap 中获得具有不同结果的 3 列,但是当名称 dr.那么只有接下来的 3 个字母作为大写字母给出。

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;
sql oracle case
1个回答
0
投票

我想从名称、upper、lower 和 initcap 中获得具有不同结果的 3 列,但是当名称 dr.那么只有接下来的 3 个字母作为大写字母给出。

A

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
执行简单的字符串比较,这会快得多。

© www.soinside.com 2019 - 2024. All rights reserved.