ich eine PostgreSQL-Tabelle und will es mit Fällen hierarchische Ordnung. Hier ein Beispiel:PostgreSQL Bestelltabelle hierarchisch unter Berücksichtigung Bedingungen
> Name | Port
> ----------------------------
> Switch1 | GigabitEthernet2/2
> Switch1 | GigabitEthernet1/2
> Switch2 | 1.23
> Switch2 | 1.21
> Switch1 | GigabitEthernet2/1
> Switch1 | GigabitEthernet1/1/3
> Switch1 | FastEthernet1/1/14
> Switch1 | FastEthernet3/0/19
> Switch1 | FastEthernet3/0/20
> Switch2 | Port-Channel3
> Switch1 | GigabitEthernet3/0/4
> Switch1 | GigabitEthernet3/1/3
> Switch1 | FastEthernet3/0/2
> Switch2 | 1.14
> Switch2 | Port-Channel6
Nach der Bestellung/Sortieranlagen es so sein sollte:
> Name | Port
> ----------------------------
> Switch1 | FastEthernet1/1/14
> Switch1 | FastEthernet3/0/2
> Switch1 | FastEthernet3/0/19
> Switch1 | FastEthernet3/0/20
> Switch1 | GigabitEthernet1/2
> Switch1 | GigabitEthernet2/1
> Switch1 | GigabitEthernet2/2
> Switch1 | GigabitEthernet1/1/3
> Switch1 | GigabitEthernet3/0/4
> Switch1 | GigabitEthernet3/1/3
> Switch2 | 1.14
> Switch2 | 1.21
> Switch2 | 1.23
> Switch2 | Port-Channel3
> Switch2 | Port-Channel6
ich versucht habe, etwas mit ORDER BY CASE zu tun. Hier ein Beispiel:
SELECT device.name, device_port.port
FROM device
JOIN device_port ON device.ip = device_port.ip
ORDER BY CASE WHEN device_port.port like 'Fast%' THEN string_to_array(substr(device_port.port, position('/' in device_port.port)-1),'/')::float[]
WHEN device_port.port like 'Gigabit%' THEN string_to_array(substr(device_port.port,16),'/')::float[]
WHEN device_port.port like 'Port-channel%' THEN string_to_array(substr(device_port.port,13),'/')::float[] END;
Aber auf diese Weise gibt es keine Möglichkeit, es zu bestellen zuerst von device.name und namentlich des Hafens. Das Ergebnis wäre zum Beispiel wie:
> Name | Port
> ----------------------------
> Switch1 | FastEthernet1/1/14
> Switch1 | GigabitEthernet1/2
> Switch1 | FastEthernet3/0/2
> Switch1 | GigabitEthernet3/0/4
Und so weiter ..
jemand eine Idee, wie dieses Problem zu lösen? Habe viele Stunden ohne Ergebnis versucht.
Vielen Dank!
Siehe die bearbeitete Antwort. Die leere Zeichenfolge in 'regexp_replace (port, '[0-9/\.]', '', 'G') bedeutet, dass alle Token, die mit' '[0-9/\.] '' Übereinstimmen, aus' entfernt werden Hafen ". – klin
Ok, das scheint die einfachere Lösung zu sein. Jetzt funktioniert alles wie erwartet. Ich schätze deine Hilfe! – Grunner