Zeichenkette rückwärts durchsuchen

Zeichenkette rückwärts durchsuchen

am 03.07.2006 12:10:36 von Karsten Schenk

Mit welchem mySQL-Befehl durchsuche ich eine Zeichenkette rückwärts?
Gibt es einen entsprechenden Befehl (,den ich übersehen habe)?

Vielen Dank im Voraus

Karsten Schenk

Re: Zeichenkette rückwärts durchsuchen

am 03.07.2006 13:32:40 von Johannes Vogel

Hi Karsten

Karsten Schenk wrote:
> Mit welchem mySQL-Befehl durchsuche ich eine Zeichenkette rückwärts?
> Gibt es einen entsprechenden Befehl (,den ich übersehen habe)?

Wozu soll sowas gut sein? Vergleich dient ja immer dazu, ob ein Tupel
ausgewählt wird oder nicht. Wenn du gerne Tupels höher stufen möchtest,
welche eine Teilzeichenkette weiter hinten im Attribut beinhalten,
kannst du mit order by locate() desc arbeiten:

mysql> create table test ( field text);
Query OK, 0 rows affected (0.04 sec)

mysql> insert into test values ('hallowelt'),('welthallo'),('nichts');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> select field from test where field like '%hallo%' order by
locate('hallo',field) desc;
+-----------+
| field |
+-----------+
| welthallo |
| hallowelt |
+-----------+
2 rows in set (0.00 sec)

HTH, Johannes

Re: Zeichenkette rückwärts durchsuchen

am 03.07.2006 14:28:30 von Karsten Schenk

Johannes Vogel wrote:
> Hi Karsten
>
> Karsten Schenk wrote:
>
>>Mit welchem mySQL-Befehl durchsuche ich eine Zeichenkette rückwärts?
>>Gibt es einen entsprechenden Befehl (,den ich übersehen habe)?
>
>
> Wozu soll sowas gut sein? Vergleich dient ja immer dazu, ob ein Tupel
> ausgewählt wird oder nicht. Wenn du gerne Tupels höher stufen möchtest,
> welche eine Teilzeichenkette weiter hinten im Attribut beinhalten,
> kannst du mit order by locate() desc arbeiten:
>
> mysql> create table test ( field text);
> Query OK, 0 rows affected (0.04 sec)
>
> mysql> insert into test values ('hallowelt'),('welthallo'),('nichts');
> Query OK, 3 rows affected (0.00 sec)
> Records: 3 Duplicates: 0 Warnings: 0
>
> mysql> select field from test where field like '%hallo%' order by
> locate('hallo',field) desc;
> +-----------+
> | field |
> +-----------+
> | welthallo |
> | hallowelt |
> +-----------+
> 2 rows in set (0.00 sec)
>
> HTH, Johannes


So meinte ich das nicht. Ich will nur einen Teil einer zurückgelieferten
Zeichenkette ausgeben. INSTR rückwärts sozusagen.

Viele Grüße

Karsten

Re: Zeichenkette rückwärtsdurchsuchen

am 03.07.2006 14:46:54 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: Zeichenkette rückwärts durchsuchen

am 03.07.2006 15:42:12 von Carsten Wiedmann

Karsten Schenk schrieb:

> Johannes Vogel wrote:
> > Karsten Schenk wrote:
> >
> > > Mit welchem mySQL-Befehl durchsuche ich eine Zeichenkette rückwärts?
> > > Gibt es einen entsprechenden Befehl (,den ich übersehen habe)?
> >
> > Wozu soll sowas gut sein? Vergleich dient ja immer dazu, ob ein Tupel
> > ausgewählt wird oder nicht. Wenn du gerne Tupels höher stufen möchtest,
> > welche eine Teilzeichenkette weiter hinten im Attribut beinhalten,
> > kannst du mit order by locate() desc arbeiten:
>
> So meinte ich das nicht. Ich will nur einen Teil einer zurückgelieferten
> Zeichenkette ausgeben.

Du meinst was mit REVERSE()? [1]

| mysql> SELECT `titel` FROM `cds` WHERE `id` = 1;
| +--------+
| | titel |
| +--------+
| | Beauty |
| +--------+
| 1 row in set (0.00 sec)
|
| mysql> SELECT REVERSE(`titel`) AS `titel` FROM `cds` WHERE `id` = 1;
| +--------+
| | titel |
| +--------+
| | ytuaeB |
| +--------+
| 1 row in set (0.00 sec)


Das wäre dann das Ganze rückwärts. Einen Teilstring kannst du dann ja mit
SUBSTR() eingrenzen.

| INSTR rückwärts sozusagen.

Hm, fehlt mir grad die Phantasie.. Hast du ein Beispiel?

Gruß
Carsten

[1] http://dev.mysql.com/doc/refman/5.0/en/string-functions.html #id2922400

Re: Zeichenkette rückwärts durchsuchen

am 03.07.2006 16:18:38 von Johannes Vogel

Hi Karsten

Karsten Schenk wrote:
> Johannes Vogel wrote:
>> Karsten Schenk wrote:
>>> Mit welchem mySQL-Befehl durchsuche ich eine Zeichenkette rückwärts?
>>> Gibt es einen entsprechenden Befehl (,den ich übersehen habe)?
>> Wozu soll sowas gut sein? Vergleich dient ja immer dazu, ob ein Tupel
>> ausgewählt wird oder nicht. Wenn du gerne Tupels höher stufen möchtest,
>> welche eine Teilzeichenkette weiter hinten im Attribut beinhalten,
>> kannst du mit order by locate() desc arbeiten:
> So meinte ich das nicht. Ich will nur einen Teil einer zurückgelieferten
> Zeichenkette ausgeben. INSTR rückwärts sozusagen.

select
substr(field,
length(field)
-locate(reverse('hallo'),reverse(field))
-length('hallo'),
length('hallo'))
from tabelle;

?! Wer will sowas denn? Da kommt ja nur 'hallo' raus. :-)

not tested. Vielleicht muss da noch am einen oder anderen Ort 1 hinzu-
oder abgezählt werden. :-)

Grüess, Johannes