大写Oracle SQL中的第一个字母

时间:2016-05-26 13:55:00

标签: sql oracle


我试图在大写字母中单独写第一个字母。

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输出:
德国
美国西班牙

4 个答案:

答案 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