2016-05-26 20 views
-3


Ich versuche, den ersten Buchstaben allein in Großbuchstaben zu machen.
Erster Buchstabe allein in Großschreibung Oracle SQL

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

Oracle Ausgabe:
DEUTSCHLAND
AMERICA
SPANIEN

meine nicht funktioniert 'Lösung'

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

Oracle Ausgabe:
DEUTSCHLAND
AMERICA
SPANIEN

+0

Hinweis: 'UPPER',' LOWER' und 'SUBSTR' –

+2

Wie bezieht sich Ihr SQL-Code auf die Frage? Ich bin mir sicher, dass du '... schreiben kannst, wenn 'G' dann 'Deutschland' ... ' – trincot

+2

Keine Ahnung, was du meinst ... was ist dein erwartetes Ergebnis, und warum bekommst du das nicht von initcap? Was ist der "Land" -Wert - ist das G/US/S, das Sie für den Fallausdruck verwenden? Wenn ja, warum haben Sie nicht einfach Ihre Ergebnis-String-Literale? und was soll mit 'unbekannt' passieren? –

Antwort

4

Da jeder Annahmen über machen hat, was Sie brauchen, hier ist mein Versuch, Verständnis, was Sie suchen -

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

Ich würde jedoch argumentieren, dass es sei denn, Sie haben eine Art von Weg automatisch generieren diese Case-Anweisungen (die ich bezweifle), warum nicht einfach schreiben WHEN 'G' THEN 'Germany' an erster Stelle.

+0

das ist es danke! Gibt es eine andere Möglichkeit, dieselbe Lösung zu erhalten? vielleicht etwas mit substr? –

+0

Schön! Ich habe seit einiger Zeit nicht mehr in Oracle gearbeitet. Ich dachte nicht an "INITCAP" den ganzen "CASE". +1 – CaptainMarvel

+3

Hängt davon ab, ob Sie für "UK" "Vereinigtes Königreich" oder "Vereinigtes Königreich" möchten. Wenn es ersteres ist, siehe die Antwort von MT0 für die Verwendung von SUBSTR. – ruudvan

2

Nehmen Sie die erste Zeichenunterkette und gelten UPPER() ihm und dann die restlichen Unterkette und gelten LOWER() es:

SELECT UPPER(SUBSTR(land, 1, 1)) || LOWER(SUBSTR(land, 2)) 
FROM customer 

diese Anwendung auf Ihre Anfrage - Sie kann nur ein wählen innerhalb eines anderen:

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

Ich muss DEUTSCHLAND nach Deutschland wechseln. –

+0

@AlexPoole Ich nahm an, dass sie "United Kingdom" in Betracht zogen und wollten es als "United Kingdom" formatiert haben, da das OP sagte, dass sie "INITCAP()" ausprobiert hätten und ihre unklaren Kommentare es so aussehen lassen . Wenn sie den ersten Buchstaben eines jeden Wortes groß schreiben wollen, können sie natürlich einfach 'INITCAP()' verwenden, wie sie in ihrem Beitrag vorgeschlagen haben (aber warum sollte die Frage dann gestellt werden?). – MT0

+0

@HansBaum Siehe mein Update auf eine einfache Methode, wie Sie es auf Ihre Abfrage anwenden. – MT0

0

Gonna einen Stich in was Sie meinen. Ihr Tag sagt Oracle, also ist INITCAP (str) definitiv das, was Sie brauchen, wenn Sie es auf einer SELECT tun, aber Sie können einfach die Zeichenfolgen eingeben, wie Sie sie wollen, wenn der Code zur Verfügung gestellt wird, was Sie tun.

Darf ich erwähnen, dass Sie ein einzelnes Zitat nach "Spanien" vermisst haben.

EDIT RESPONSE:

Sie müssen INITCAP() auf den Ausgang rufen nicht die Eingabe.

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

Ich weiß, das funktioniert, aber ich muss eine Funktion hinzufügen, die die Arbeit für mich erledigt –

+0

@HansBaum - müssen Sie * eine * Funktion * erstellen, oder müssen Sie * eine integrierte Funktion * aufrufen? –

+0

@HansBaum kannst du deinen Beitrag bearbeiten? Wir brauchen dich, um genau zu zeigen, was du probiert hast und was genau du sehen willst. Wie haben Sie INITCAP() benutzt? Dies ist fast sicher die Funktion, die Sie benötigen. – CaptainMarvel

2

OK, Sie rufen initcap() an der falschen Stelle an; Sie müssen das Ergebnis der Fall Ausdruck innerhalb des Gesprächs:

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

Im Moment zu ‚G‘ ‚G‘ Sie ändern, die nichts tut; das wäre nur nützlich, wenn du Land auf "g" gesetzt hättest.

Demo:

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 

Es wäre natürlich, wie bereits kommentiert wurde, viel einfacher when 'G' then 'Germany' etc zu haben .; und in der realen Welt würden die Ländernamen wahrscheinlich in einer Nachschlagetabelle sein.