我试图在大写字母中单独写第一个字母。
select
case
when 'G' then 'GERMANY'
when 'US' then 'AMERICA'
when 'S' then 'SPAIN
else 'unknown'
from
customer
Oracle输出:
德国
美国西班牙
我的工作不正确'
select
case initcap(land)
when 'G' then 'GERMANY'
when 'US' then 'AMERICA'
when 'S' then 'SPAIN
else 'unknown'
from
customer
Oracle输出:
德国
美国西班牙
答案 0 :(得分:4)
因为每个人都必须对你需要的东西做出假设,所以我试图理解你在寻找什么 -
heatmap_gen.py
然而,我会争辩说,除非你有某种方法来自动生成这些case语句(我怀疑),为什么不首先写SELECT INITCAP (
CASE land
WHEN 'G' THEN 'GERMANY'
WHEN 'US' THEN 'AMERICA'
WHEN 'S' THEN 'SPAIN'
ELSE 'unknown'
END)
FROM customer;
。
答案 1 :(得分:2)
取第一个字符子字符串并对其应用UPPER()
,然后取出剩余的子字符串并将LOWER()
应用于其中:
SELECT UPPER( SUBSTR( land, 1, 1 ) ) || LOWER( SUBSTR( land, 2 ) )
FROM customer
将此应用于您的查询 - 您可以将一个选择嵌套在另一个选择中:
SELECT UPPER( SUBSTR( land, 1, 1 ) ) || LOWER( SUBSTR( land, 2 ) )
FROM (
SELECT CASE land
WHEN 'G' THEN 'GERMANY'
WHEN 'US' THEN 'AMERICA'
WHEN 'UK' THEN 'UNITED KINGDOM'
WHEN 'S' THEN 'SPAIN
ELSE 'UNKNOWN'
END AS land
FROM customer
)
答案 2 :(得分:2)
好的,你在错误的地方打电话给initcap()
;你需要在调用中使用case表达式的结果:
select initcap(case land
when 'G' then 'GERMANY'
when 'US' then 'AMERICA'
when 'S' then 'SPAIN'
else 'unknown'
end)
from customer
此刻你正在将'G'改为'G',这什么都不做;只有在你将土地设置为'g'时才会有用。
演示:
with customer (land) as (
select 'S' from dual
union all select 'G' from dual
union all select 'US' from dual
union all select 'UK' from dual
)
select initcap(case land
when 'G' then 'GERMANY'
when 'US' then 'AMERICA'
when 'S' then 'SPAIN'
else 'unknown'
end)
from customer;
INITCAP
-------
Spain
Germany
America
Unknown
当然,正如已经评论过的那样,when 'G' then 'Germany'
等会更加简单;而在现实世界中,国名可能会在查找表中。
答案 3 :(得分:0)
要捅你的意思。你的标签是Oracle,所以INITCAP(str)绝对是你在SELECT
上做的所需要的,但你可以根据需要输入字符串,如果提供的代码就是你&# 39;重新做。
select case
when 'G' then 'Germany'
when 'US' then 'America'
when 'S' then 'Spain'
else 'Unknown'
from customer
值得注意的是,在"西班牙"。
之后,你错过了一个单引号您需要在输出上调用INITCAP()
而不是输入。
select case
when 'G' then INITCAP('GERMANY')
when 'US' then INITCAP('AMERICA')
when 'S' then INITCAP('SPAIN')
else INITCAP('unknown')
from customer