In der Abfrage den Feldinhalt von hinten kürzen bzw. ersetzen mit Stringfunktionen INSERT und REVER

In der Abfrage den Feldinhalt von hinten kürzen bzw. ersetzen mit Stringfunktionen INSERT und REVER

am 22.04.2007 14:24:20 von Kai Koenig

Hallo,

ich habe in einer Tabelle Telefonnummern abgespeichert, die jetzt für
einen Einzelverbindungsnachweis verwendet werden sollen.
Das Feld kann vier bis 26 Ziffern enthalten und ich möchte die letzten
drei durch Sternchen o.Ä. ersetzt haben.

Ich habe mir bereits die String-Funktionen von MySQL angeschaut [1] und
bin auf INSERT gekommen, konnte aber nicht herausfinden, wie ich das
ganze sinnvoll von hinten auf ein Tabellenfeld anwende.

Probiert habe ich es mit:

SELECT INSERT('1234564788',-3, 1, '***');
Das gibt mir die übergebene Zahlenfole unverändert zurück, weil INSERT
wohl keinen Anfang von hinten unterstüzt (zum Glück ist man auf
Spekulationen angewiesen, weil dazu nichts in der Doku steht...)

SELECT INSERT('1234564788',1, 3, '***');
funktioniert. Aber halt von vorne.

Es funktioniert auch
SELECT INSERT((SELECT REVERSE(rufnummer)),1,3,'***') FROM datenbank.telefon
weil dann ja hinten vorne ist - irgendwie ;-)

Wenn ich aber jetzt versuche, noch ein weiteres REVERSE außen
drumherumzuhängen, bekomme ich:
""Subquery returns more than 1 row""

Ich habe mir bereits [2] zu Gemüte geführt, konnte aber keine Lösung
erarbeiten.

Frage: Wie bekomme ich es hin, alle Felder aus datenbank.telefon
auszuwählen (SELECT * FROM...) und dabei gleichzeitig das Feld rufnummer
mit dem oben zuletzt gezeigten SELECT zu formatieren?

Vielen Dank fürs lesen und eventuelle Hilfe!

VG

Kai

[1]: http://dev.mysql.com/doc/refman/5.1/de/string-functions.html
[2]: http://dev.mysql.com/tech-resources/articles/4.1/subqueries. html

MySQL-Version: 4.1.19-standard

Re: In der Abfrage den Feldinhalt von hinten kürzenbzw. ersetzen mit Stringfunktionen INSERT und RE

am 22.04.2007 14:32:21 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: In der Abfrage den Feldinhalt von hinten kürzen bzw. ersetzen mit Stringfunktionen INSERT und R

am 22.04.2007 15:07:16 von Kai Koenig

Hallo Andreas,

danke für den Hinweis!
Dann werde ich mal http://dev.mysql.com/doc/refman/5.1/de/regexp.html
durcharbeiten!

VG

Kai

Re: In der Abfrage den Feldinhalt von hinten kürzen bzw. ersetzen mit Stringfunktionen INSERT und R

am 22.04.2007 15:31:11 von Stephan Menzel

>Hallo,
>
>ich habe in einer Tabelle Telefonnummern abgespeichert, die jetzt für
>einen Einzelverbindungsnachweis verwendet werden sollen.
>Das Feld kann vier bis 26 Ziffern enthalten und ich möchte die letzten
>drei durch Sternchen o.Ä. ersetzt haben.
>
>Ich habe mir bereits die String-Funktionen von MySQL angeschaut [1] und
>bin auf INSERT gekommen, konnte aber nicht herausfinden, wie ich das
>ganze sinnvoll von hinten auf ein Tabellenfeld anwende.
>
>Probiert habe ich es mit:
>
>SELECT INSERT('1234564788',-3, 1, '***');
>Das gibt mir die übergebene Zahlenfole unverändert zurück, weil INSERT
>wohl keinen Anfang von hinten unterstüzt (zum Glück ist man auf
>Spekulationen angewiesen, weil dazu nichts in der Doku steht...)
>
>SELECT INSERT('1234564788',1, 3, '***');
>funktioniert. Aber halt von vorne.
Wie wäre es mit
SELECT INSERT('123456788', LENGTH('123456788')-3, 3, '***');


>
>Es funktioniert auch
>SELECT INSERT((SELECT REVERSE(rufnummer)),1,3,'***') FROM datenbank.telefon
>weil dann ja hinten vorne ist - irgendwie ;-)
>
>Wenn ich aber jetzt versuche, noch ein weiteres REVERSE außen
>drumherumzuhängen, bekomme ich:
>""Subquery returns more than 1 row""
>
>Ich habe mir bereits [2] zu Gemüte geführt, konnte aber keine Lösung
>erarbeiten.
>
>Frage: Wie bekomme ich es hin, alle Felder aus datenbank.telefon
>auszuwählen (SELECT * FROM...) und dabei gleichzeitig das Feld rufnummer
>mit dem oben zuletzt gezeigten SELECT zu formatieren?
>
>Vielen Dank fürs lesen und eventuelle Hilfe!
>

cu Stephan

Re: In der Abfrage den Feldinhalt von hinten kürzen bzw. ersetzen mit Stringfunktionen INSERT und R

am 22.04.2007 15:33:39 von Stephan Menzel

>Wie wäre es mit
>SELECT INSERT('123456788', LENGTH('123456788')-3, 3, '***');
>
Sorry kleiner Denkfehler!
Da an Position ja schon ersetzt wird die andegeben ist!

SELECT INSERT('123456788', LENGTH('123456788')-2, 3, '***');

cu Stephan

Re: In der Abfrage den Feldinhalt von hinten kürzen bzw. ersetzen mit Stringfunktionen INSERT und R

am 22.04.2007 15:50:00 von Kai Koenig

Hallo,

ich habe jetzt auf MySQL - 5.0.37-standard upgedated.

Der Hinweis von Andreas hat mir noch nicht so viel gebracht, weil bei
REGEXP nur der Vergleich möglich ist [1].

Irgendwelche weiteren Ideen?

VG

Kai


[1]: http://lists.mysql.com/mysql-de/1515

Re: In der Abfrage den Feldinhalt von hinten kürzen bzw. ersetzen mit Stringfunktionen INSERT und R

am 22.04.2007 15:51:26 von Stephan Menzel

Hallo,

vorm Posten lesen?

>Hallo,
>
>ich habe jetzt auf MySQL - 5.0.37-standard upgedated.
>
>Der Hinweis von Andreas hat mir noch nicht so viel gebracht, weil bei
>REGEXP nur der Vergleich möglich ist [1].
>
>Irgendwelche weiteren Ideen?
>
>VG
>
>Kai

cu Stephan

Re: In der Abfrage den Feldinhalt von hinten kürzen bzw. ersetzen mit Stringfunktionen INSERT und R

am 22.04.2007 15:59:26 von Kai Koenig

Hallo Stephan,

das sieht ja ganz gut aus...

Wenn ich aber versuche, die Datenbankfelder zu verwenden, bekomme ich
entweder eine Fehlermeldung (Syntax) oder eine leere Ergebnismenge.

Wahrscheinlich stehe ich an einer ungünstigen Stelle auf dem Schlauch...

Danke schonmal!

VG

Kai

Re: In der Abfrage den Feldinhalt von hinten kürzen bzw. ersetzen mit Stringfunktionen INSERT und R

am 22.04.2007 16:00:41 von Kai Koenig

;-)

Der Post hat solange geschmort und Thunderbird holt die News nicht ab
bzw. sagt nicht Bescheid...

Ansonsten hast du natürlich Recht :-)

VG

Kai

Re: In der Abfrage den Feldinhalt von hinten kürzen bzw. ersetzen mit Stringfunktionen INSERT und R

am 22.04.2007 16:03:48 von Stephan Menzel

Halo,

dann müsstest Du mal genauer mitteilen um was es geht!
Wie sieht dein richtiges SELECT aus und deine Tabellen

>Hallo Stephan,
>
>das sieht ja ganz gut aus...
>
>Wenn ich aber versuche, die Datenbankfelder zu verwenden, bekomme ich
>entweder eine Fehlermeldung (Syntax) oder eine leere Ergebnismenge.
>
>Wahrscheinlich stehe ich an einer ungünstigen Stelle auf dem Schlauch...
>
>Danke schonmal!
>
>VG
>
>Kai

cu Stephan

GELÖST In der Abfrage den Feldinhalt von hinten kürzen bzw. ersetzen mit Stringfunktionen INSERT u

am 22.04.2007 17:53:46 von Kai Koenig

Hallo Stephan,
> dann müsstest Du mal genauer mitteilen um was es geht!
> Wie sieht dein richtiges SELECT aus und deine Tabellen

SELECT durchwahl, datum, uhrzeit, dauer, einheiten, (SELECT
REVERSE((SELECT INSERT((SELECT REVERSE(rufnummer)), 1,3,'***' )))) FROM
datenbank.telefon WHERE art = '-->' ORDER BY datensatznr LIMIT 10

funktioniert!

Vielen Dank für die Hilfe, manchmal brauchts einfach einen Stoß in die
richtige Richtung!


VG

Kai

Re: GELÖST In der Abfrage den Feldinhalt von hinten kürzen bzw. ersetzen mit Stringfunktionen INSE

am 22.04.2007 18:55:44 von Stephan Menzel

Hallo,

>Hallo Stephan,
>> dann müsstest Du mal genauer mitteilen um was es geht!
>> Wie sieht dein richtiges SELECT aus und deine Tabellen
>
>SELECT durchwahl, datum, uhrzeit, dauer, einheiten, (SELECT
>REVERSE((SELECT INSERT((SELECT REVERSE(rufnummer)), 1,3,'***' )))) FROM
>datenbank.telefon WHERE art = '-->' ORDER BY datensatznr LIMIT 10
>
also das

SELECT durchwahl, datum, uhrzeit, dauer, einheiten,
INSERT(rufnummer, LENGTH(rufnummer)-2,3,'***' ) AS `rufnummer_kurz`
FROM datenbank.telefon WHERE art = '-->' ORDER BY datensatznr LIMIT 10

sollte da auch gehen und wohl etwas schneller sein da weniger
subselect's, und Du brauchst nicht vor jeder MySQL Funktion ein
SELECT!

SELECT durchwahl, datum, uhrzeit, dauer, einheiten, REVERSE( INSERT(
REVERSE(rufnummer), 1,3,'***' ) FROM datenbank.telefon WHERE art =
'-->' ORDER BY datensatznr LIMIT 10


>funktioniert!
>
>Vielen Dank für die Hilfe, manchmal brauchts einfach einen Stoß in die
>richtige Richtung!
>

cu Stephan

Re: GELÖST In der Abfrage den Feldinhalt von hinten kürzen bzw. ersetzen mit Stringfunktionen INSE

am 22.04.2007 19:08:53 von Kai Koenig

Hallo Stephan,

vielen Dank für den Tipp und die Vereinfachung.

Die Abfrage des Servers selber ist jetzt etwa doppelt so schnell!

VG

Kai

Re: In der Abfrage den Feldinhalt von hinten kürzen bzw. ersetzen mit Stringfunktionen INSERT und R

am 22.04.2007 20:01:33 von Christian Kirsch

Andreas Kretschmer schrieb:
> begin Kai Koenig wrote:
>> Hallo,
>
>> ich habe in einer Tabelle Telefonnummern abgespeichert, die jetzt für
>> einen Einzelverbindungsnachweis verwendet werden sollen.
>> Das Feld kann vier bis 26 Ziffern enthalten und ich möchte die letzten
>> drei durch Sternchen o.Ä. ersetzt haben.
>
> select regexp_replace('1234567', '...$', '***');
>
> Das ist zwar PG, aber MySQL hat ganz sicher wohl auch REGEX-Funktionen.
>

Im Prinzip ja - aber das letzte Mal, als ich geguckt habe, konnte es
kein replace :-(

Re: In der Abfrage den Feldinhalt von hinten kürzen bzw. ersetzen mit Stringfunktionen INSERT und R

am 22.04.2007 20:10:50 von Kai Koenig

Hallo Christian,

dann schau lieber nicht... es kann immer noch kein replace.

;-)

VG

Kai