Suche elegante Lösung für Teilstring Abfrage

Marcus75

Neuer Benutzer
Beiträge
3
Hallo zusammen,

zunächst einmal kurz zu mir: ich bin ein "Neuer", heiße Marcus, bin 38, komme aus der Nähe von Hannover und habe dieses Forum "ergoogelt" :)

Nun aber zu meiner Frage: Ich habe einen String in meiner MySQL Tabelle, den ich in einer Abfrage zerlegen muss...

Der String schaut aus wie folgt:

AAAAABBBBBYCCCCC
AAAAABBBBYCCCCC
AAAAABBBYCCCCC
AAAAABBYCCCCC
AAAAABYCCCCC

Ich möchte den String im Bereich Y nach einem Buchstaben zwischen A-Z trennen, dummerweise ist die Zeichenposition der gewünschten Trennung unterschiedlich - soll also ab Zeichen 5 die Übereinstimmung suchen & den String wie folgt ausgeben:
AAAAABn

Gibt es dafür eine elegante Lösung?

Vielen Dank im Vorraus :)
Marcus
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.846
Hallo zusammen,

zunächst einmal kurz zu mir: ich bin ein "Neuer", heiße Marcus, bin 38, komme aus der Nähe von Hannover und habe dieses Forum "ergoogelt" :)

Nun aber zu meiner Frage: Ich habe einen String in meiner MySQL Tabelle, den ich in einer Abfrage zerlegen muss...

Der String schaut aus wie folgt:

AAAAABBBBBYCCCCC
AAAAABBBBYCCCCC
AAAAABBBYCCCCC
AAAAABBYCCCCC
AAAAABYCCCCC

Ich möchte den String im Bereich Y nach einem Buchstaben zwischen A-Z trennen, dummerweise ist die Zeichenposition der gewünschten Trennung unterschiedlich - soll also ab Zeichen 5 die Übereinstimmung suchen & den String wie folgt ausgeben:
AAAAABn

Gibt es dafür eine elegante Lösung?

Vielen Dank im Vorraus :)
Marcus

Bestimmt. Mir ist nur nicht ganz klar, was Du willst. Ist n die Länge des restlichen Strings?

Code:
test=*# select * from marcus;
 id |        t
----+------------------
  1 | aaaaabbbbbyccccc
  2 | aaaaabbbbyccccc
  3 | aaaaabbbyccccc
  4 | aaaaabbyccccc
  5 | aaaaabyccccc
(5 rows)

Time: 0,174 ms
test=*# select *, substring(t,1,6) || (length(t)-6)::text from marcus;
 id |        t         | ?column?
----+------------------+----------
  1 | aaaaabbbbbyccccc | aaaaab10
  2 | aaaaabbbbyccccc  | aaaaab9
  3 | aaaaabbbyccccc   | aaaaab8
  4 | aaaaabbyccccc    | aaaaab7
  5 | aaaaabyccccc     | aaaaab6
(5 rows)

Das in Großbuchstaben zu machen überlasse ich Dir zur Übung ;-), und ja, wie bei mir üblich: Lösung ist mit PostgreSQL gemacht.

Andreas
 

akretschmer

Datenbank-Guru
Beiträge
9.846
Hi,

mit Bn meinte ich die Zeichen, welche bis zur Trennung auf Y erfolgen.

Viele Grüße
Marcus

Also das:

Code:
test=*# select *, substring(t,1,6) || replace(substring(t,6,(length(t)-6)),'b','') from marcus;
id |        t        |  ?column?
----+------------------+-------------
  1 | aaaaabbbbbyccccc | aaaaabycccc
  2 | aaaaabbbbyccccc  | aaaaabycccc
  3 | aaaaabbbyccccc  | aaaaabycccc
  4 | aaaaabbyccccc    | aaaaabycccc
  5 | aaaaabyccccc    | aaaaabycccc
(5 rows)
 
--oder
test=*# select *, substring(t,1,6) || split_part(t,'y',2) from marcus;
id |        t        |  ?column?
----+------------------+-------------
  1 | aaaaabbbbbyccccc | aaaaabccccc
  2 | aaaaabbbbyccccc  | aaaaabccccc
  3 | aaaaabbbyccccc   | aaaaabccccc
  4 | aaaaabbyccccc    | aaaaabccccc
  5 | aaaaabyccccc     | aaaaabccccc
(5 rows)

oder was?

Andreas
 

Marcus75

Neuer Benutzer
Beiträge
3
Hi nochmal,

also A ist immer 5 Zeichen lang, ab Länge A sollen in B alle Zeichen bis zur Trennung Y (einem Buchstabe) ausgegeben werden, C wird nicht benötigt.

Viele Grüße
Marcus
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.846
Hi nochmal,

also A ist immer 5 Zeichen lang, ab Länge A sollen in B alle Zeichen bis zur Trennung Y (einem Buchstabe) ausgegeben werden, C wird nicht benötigt.

Viele Grüße
Marcus

Naja, wie dem auch sei: Du hast ja jetzt einige Hinweise. Da ich mit PostgreSQL arbeite, kannst das ja eh nicht direkt übernehmen. Also, ich denke, Du schaffst das jetzt.

Viel Erfolg!
 
Oben