2016-05-26 9 views
-3


大文字で最初の文字を単独で作成しようとしています。
大文字の最初の文字Oracle SQL

select 
    case 
      when 'G' then 'GERMANY' 
      when 'US' then 'AMERICA' 
      when 'S' then 'SPAIN 
      else 'unknown' 
from 
    customer 

Oracleの出力:
ドイツ
AMERICA
スペイン

私の働いていない 'ソリューション'

select 
    case initcap(land) 
      when 'G' then 'GERMANY' 
      when 'US' then 'AMERICA' 
      when 'S' then 'SPAIN 
      else 'unknown' 
from 
    customer 

Oracleの出力:
ドイツ
AMERICA
スペイン

+0

ヒント: 'UPPER'、' LOWER'、および 'SUBSTR' –

+2

SQLコードはどのように質問に関連していますか?私はあなたが '' G '、' Germany '...と書いてもいいと確信しています。 – trincot

+2

あなたの期待する結果は何ですか、なぜあなたはinitcapから得たものではありませんか? 「土地」価値とは何ですか?あなたがケース表現に使用しているG/US/Sですか?もしそうなら、あなたが望む場合に結果文字列リテラルを持たないのはなぜですか? 「未知」はどうなるのでしょうか? –

答えて

4

誰もがここで、あなたが必要なものについての仮定を行うことがあるので、あなたが探しているものを理解するのが私の試みである -

SELECT INITCAP (
      CASE land 
      WHEN 'G' THEN 'GERMANY' 
      WHEN 'US' THEN 'AMERICA' 
      WHEN 'S' THEN 'SPAIN' 
      ELSE 'unknown' 
      END) 
    FROM customer; 

しかし私は、しない限り、あなたがへの道のいくつかの並べ替えを持っていることを主張するだろうこれらのケースステートメントを自動的に生成します(私はこれを疑います)。最初はWHEN 'G' THEN 'Germany'と書いてください。

+0

それはありがとう!同じソリューションを得る別の方法はありますか?多分substrと何か? –

+0

ニース!しばらくの間はOracleで働いていない。 'CASE'全体を' INITCAP'とは思っていませんでした。 +1 – CaptainMarvel

+3

「英国」の方が「英国」か「英国」かによって異なります。それが前者の場合は、SUBSTRの使用に関するMT0の回答を参照してください。 – ruudvan

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 
) 
+0

私はドイツにドイツを変更する必要があります。 –

+0

@AlexPoole私は、彼らが 'INITCAP()'を試みたと言って、彼らが彼らのために働いていなかったように見えることを明らかにしたので、彼らは '英国を考えていて、それを'英国王国 ' 。彼らが各単語の最初の文字を大文字にしたいのであれば、彼らはもちろん彼らが投稿で示唆したように 'INITCAP()'を使うことができます。 – MT0

+0

@HansBaum簡単な方法でクエリに適用する方法については、私の更新を参照してください。 – MT0

0

あなたが意味するところで刺すつもりです。あなたのタグはオラクルですから、SELECTでINITCAP(str)が必要なことは間違いありませんが、提供されているコードがあなたの行っているものであれば、文字列を入力するだけで済みます。

「スペイン」の後に一重引用符がありませんでした。

EDIT応答:

あなたが出力されていない入力にINITCAP()を呼び出す必要があります。

select case 
when 'G' then INITCAP('GERMANY') 
when 'US' then INITCAP('AMERICA') 
when 'S' then INITCAP('SPAIN') 
else INITCAP('unknown') 
from customer 
+0

私はこの作品を知っていますが、私のために仕事をする関数を追加する必要があります –

+0

@HansBaum - あなたは*関数を作成*する必要がありますか?*組み込み関数を呼び出す必要がありますか? –

+0

@HansBaumあなたの投稿を編集できますか?私たちはあなたが試したことを正確に、そしてあなたが見たいものを正確に示す必要があります。どのようにINITCAP()を使用しましたか?これはほぼ確実に必要な機能です。 – CaptainMarvel

2

OK、間違った点でinitcap()を呼び出しています。あなたは何もしない「G」に「G」を変更している瞬間に

select initcap(case land 
    when 'G' then 'GERMANY' 
    when 'US' then 'AMERICA' 
    when 'S' then 'SPAIN' 
    else 'unknown' 
    end) 
from customer 

;:あなたは、コール内のcase式の結果が必要土地が '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'などを持つことが非常に簡単になります;現実の世界では、国名はおそらくルックアップテーブルにあるでしょう。

関連する問題