嗨,我在这里的选择不起作用。有人能告诉我我的语法有什么问题吗?我想从名称、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;
我想从名称、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
执行简单的字符串比较,这会快得多。