Können wir den FALL...WENN im inneren SUBSTRING?

(Hier ist eine viel einfachere Fall von meinem eigentlichen Problem zu arbeiten)

Sagen wir ich habe eine Tabelle, genannt 'a' mit einer Spalte 'col' mit den folgenden Werten (sagen wir eine Spalte der Länge 2 mit viele zufällige Kombination von Zeichen):

Kol 
A3 
D2 
@5 
#) 
... 

Will ich mit einer select-Anweisung, Ausgänge zwei Spalten namens 'Brief' und 'Anzahl' where 'Brief' ist das erste Zeichen von 'col' & 'Zahl' ist der zweite Charakter von 'col', aber mit der folgenden Zuordnung:

If substring(col FROM 1 for 1) in ('!','@','#'),
    then letter = 'A' and 'number' = substring(col FROM 2 for 1)

(D. H., wenn das erste Zeichen von etwas in 'col' ist '!', '@'oder '#', auf Karte
'Brief' als 'A', während der zweite Charakter von 'col' und
Zuordnung, dass der Wert 'number')

If col = '%9', 
    then 'letter' = 'H' and 'number' = '9'

(D. H., wenn ein bestimmter Wert in 'col' '%9', ordnen Sie es 'Brief' als 'H' und
'Anzahl' als '9')

If substring(col FROM 2 for 1) = '4',
    then 'letter' = substring(col FROM 1 for 1) and 'number' = '7'

(d.h., wenn das zweite Zeichen ein Wert in 'col' ist', 4', lassen die ersten
Charakter unverändert und die Karte "Brief", und ordnen Sie das zweite Zeichen zu
'Anzahl' als '7')

Schließlich nur die Werte auswählen, wo "Brief" ist ein Brief und 'Zahl' ist eine
Charakter-Anzahl. Das ist,

'letter' in ('A','B',...'Z') and 'number' in ('0','1',...'9')

Wie Sie die Abfrage würde ich ausführen, um dieses Problem zu lösen? Das ist, mit dem mapping hardcoded mit FALL..WANN?

Ideal, ich bin versucht, etwas zu tun wie:

SELECT substring((Case...When) FROM 1 for 1) AS letter,
substring((Case...When) FROM 2 for 1) AS number
FROM a;

Dank!

Bitte Bearbeiten Sie die Frage an zeigen Beispiel Daten und gewünschten Ergebnisse. Das kann eine große Hilfe für andere, um die Logik zu verstehen.
Ich habe bearbeitet die OP zu machen, mehr explizit.
Noch ziemlich schwer zu Folgen. Einige Zuordnungen von Eingabe -> output kann dabei sehr hilfreich sein. Insgesamt klingt es wie Sie wollen einfach nur eine Reihe von Ersetzungsregeln - wahrscheinlich einen oder mehrere reguläre Ausdrücke wird gut tun.
Ich fragte eine Vorherige Frage mit einer Eingabe->Ausgangsleistung, aber die Antworten nicht in das format, das ich fragte, (der FALL..WENN in einem substring). Hier ist eine allgemeinere form meiner Frage: Angenommen, Sie haben eine Spalte 'col' mit zwei Figuren. Ich möchte eine SELECT-Anweisung, teilt die Werte von 'col' in zwei Spalten-eine für die erste und zweite Charakter von 'col', aber mit bestimmten Bedingungen/Substitutionen/ - AUSSCHLÜSSE.

InformationsquelleAutor Harry Lime | 2014-05-29

Schreibe einen Kommentar