2016-04-12 14 views
3

Ich möchte eine Abfrage, die mich zeigt, last_name mit dem ersten Buchstaben aktiviert und auch die letzte in Großbuchstaben geschrieben.SQL Groß- und Kleinschreibung ersten und letzten Buchstaben eines Namens

Beispiel: nachname = 'Alexander' nach Abfrage: nachname = 'Alexander'

Ich mag dieses versucht

select initcap(last_name)+LOWER(SUBSTR(last_name,2,LENGTH(last_name))) name_last from employees 

aber ich bin immer dieser Fehler 01722. 00000 - "ungültige Nummer"

Ich verwende SQL Oracle DB

Kann mir jemand erklären, was das Problem ist?

+3

Verwenden Sie '||' für die Verkettung von Strings in Oracle, nicht '+'. –

+2

'SELECT initcap (rückwärts (initcap (reverse (last_name))))' wenn Sie sich dumm fühlen :-) – Jeroen

+0

Wie kann ich den letzten Buchstaben groß schreiben? –

Antwort

7

Das Problem ist das Verkettungszeichen. Allerdings möchte ich einen etwas anderen Ansatz vorschlagen:

select (upper(substr(last_name, 1, 1)) || 
     substr(last_name, 2, len(last_name) - 2) || 
     upper(substr(last_name, -1, 1)) 
     ) 

Mit anderen Worten, vermeiden initcap(). Das Problem sind unerwartete Nebenwirkungen. initcap() macht den ersten Buchstaben jedes Wortes in der Zeichenfolge groß. Wenn also der Name aus mehreren Wörtern besteht, dann wird jedes in Großbuchstaben geschrieben. Unter solchen Umständen halte ich es nicht für angebracht anzunehmen, dass der Nachname nur aus einem Namen besteht.

+1

ja, es funktioniert gut, danke, aber anstelle von LEN in sql müssen Sie verwenden LÄNGE –

+0

können Sie mir sagen, wie ich eine Float-Nummer schreiben kann, wie Kommission, mit Nullauffüllung nach rechts Beispiel: commission_pct = 0.5 nach Abfrage, commission_pct = 0.50000000 ? –

+0

Ich habe es gefunden DECODE (commission_pct, NULL, 'NO KOMMISSION', TO_CHAR (rpad (COMMISSION_PCT, 9, '0'))) Komm –

1

Um die Zeichenkette, die Sie verwenden, '+' zu verketten, die Ihre Zeichenkette betrachtet, sind Nummer, die nicht der Fall ist, und Sie erhalten diesen Fehler.

Zum Verketten von Strings in Oracle verwenden Sie bitte entweder || Operator oder CONCAT() -Funktion.

So Ihre Anfrage wird wie:

select initcap(last_name) || LOWER(SUBSTR(last_name,2,LENGTH(last_name))) name_last from employees; 

Jetzt können Sie diese modifizieren, um die Ausgabe erhalten Sie erwarten.

Verwandte Themen