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