Mysql od. Access Teil-String auswerten?

Deletemaster

Erfahrenes Mitglied
Hallo zusammen,

ich habe eine Tabelle (vorwahlen) mit allen Vorwahlen von Deutschland (Anzahl ca. 5000) als string gespeichert (wegen führender 0)
in einer weiteren Tabelle (adressen) in denen das Feld vorwahl ( string) und telefon( string) noch leer ist
im Feld vrn string(VollständigeRufNummer), steht die Telefonnummer zusammen mit der Vorwahl OHNE Trennzeichen.
z.B. 069765432, 0405572876, 03318844551
Jetzt benötige ich eine Query, die diese beiden Tabellen vergleicht, und im Feld vrn entweder per UPDATE ein Trennzeichen nach der Vorwahl setzt, oder die den string vrn gleich in die Felder vorwahl und telefon aufteilt.

Habt ihr eine Lösung für mein Problem?

Danke für Eure Hilfe
 
Hallo,

versuchs doch in MySQL mal damit:
Hab die

SQL:
update adressen a 
   set vorwahl = (select vorwahl 
                    from vorwahlen 
                   where a.vrn like CONCAT(vorwahlen.vorwahl,'%')),    
        nummer = SUBSTRING(vrn FROM LENGTH(vorwahl)+1)

Hoffe es hilft,
Markus
 
Hallo Markus,

vielen Dank, aber ich bekomme eine Fehlermeldung:

...syntax to use near 'SELECT vorwahl FROM vorwahlen WHERE a.vrn LIKE CONCAT(vorwahlen

Ich weiß nicht warum hier ein Syntaxfehler auftaucht?

Ich habe die Version: 4.0.12

Danke für die Hilfe
 
Hallo,

ja, das stimmt, mein Beispiel war auf die Version 5 bezogen.

Für Version 4.0 musst du ohne Subqueries auskommen, glaub ich mich zu erinnern.
Musst das Statement dann auf mehrere aufteilen oder falls möglich mit Joins arbeiten.
Heute abend hab ich evtl. noch mal Zeit falls in der Zwischenzeit niemand antwortet.

Schau Dir doch mal solange diesen Abschnitt in der 4.0 Doku an:
http://dev.mysql.com/doc/refman/4.1/en/rewriting-subqueries.html

Markus
 
Hallo,

versuchs mal so:

SQL:
update adressen,vorwahlen 
   set adressen.vorwahl  = vorwahlen.vorwahl,     
       adressen.nummer = SUBSTRING(adressen.vrn,LENGTH(adressen.vorwahl)+1) 
 where adressen.vrn like CONCAT(vorwahlen.vorwahl,'%')

Edit: Hab noch mal nachgeschaut, die Lösung geht auch erst ab MySQL 4.1, da erst dort Tabellen-Updates mit mehreren Tabellen realisiert wurden.

Markus
 
Hallo Markus,

das war schon mal Spitze ;)
jetzt wird die vorwahl in das Feld vorwahl geschrieben und in das Feld nummer = 0301234567
also die nummer mit der vorwahl
danach erfolgt ein Zeilenumbruch?

vorher:
Code:
mysql> select * from adressen;
+--------+---------+----------+---------+------+------+---------+---------+--------------+
| anrede | vorname | nachname | strasse | plz  | ort  | vorwahl | telefon | vrn          |
+--------+---------+----------+---------+------+------+---------+---------+--------------+
  |      |         |          |         |      |      |         |         | 0308422777
   |     |         |          |         |      |      |         |         | 040568741
  |      |         |          |         |      |      |         |         | 0711548956
 |       |         |          |         |      |      |         |         | 03316014040
  |      |         |          |         |      |      |         |         | 0698875641
  |      |         |          |         |      |      |         |         | 0301234567
+--------+---------+----------+---------+------+------+---------+---------+--------------+

nachher:

Code:
mysql> select * from adressen;
+--------+---------+----------+---------+------+------+---------+--------------+--------------+
| anrede | vorname | nachname | strasse | plz  | ort  | vorwahl | telefon      | vrn          |
+--------+---------+----------+---------+------+------+---------+--------------+--------------+
  | 0308422777     |          |         |      |      | 030     | 0308422777
  | 040568741       |          |         |      |      | 040     | 040568741
  | 0711548956     |          |         |      |      | 0711    | 0711548956
  | 03316014040   |          |         |      |      | 0331    | 03316014040
  | 0698875641     |          |         |      |      | 069     | 0698875641
  | 0301234567     |          |         |      |      | 030     | 0301234567
+--------+---------+----------+---------+------+------+---------+--------------+--------------+
habe jetzt nach telefon einen Zeilenumbruch
in der Textexportdatei folgendermaßen:
Code:
						030	0308422777
	0308422777
						040	040568741
	040568741
						0711	0711548956
	0711548956
						0331	03316014040
	03316014040
						069	0698875641
	0698875641
						030	0301234567
	0301234567

hmmm, aber die vorwahl wird ja schon mal aus der table gelesen und eingefügt...
 
Hallo deletemaster,

seltsam, ja. Bei mir funktioniert die Query problemlos und macht auch nichts mit Zeilenumbrüchen usw.

Probier evtl. mal folgendes (wundert mich soundso dass es teilweise geht bei dir):

SQL:
      UPDATE adressen,vorwahlen
   SET adressen.vorwahl  = vorwahlen.vorwahl,     
       adressen.nummer = SUBSTRING(adressen.vrn,LENGTH(vorwahlen.vorwahl)+1)
 WHERE adressen.vrn LIKE CONCAT(vorwahlen.vorwahl,'%')

Markus
 
Hey Markus, das sieht ja schon richtig toll aus...

vorher:
Code:
| anrede | vorname | nachname | strasse | plz  | ort  | vorwahl | telefon | vrn          |
+--------+---------+----------+---------+------+------+---------+---------+--------------+
  |      |         |          |         |      |      |         |         | 0308422777
   |     |         |          |         |      |      |         |         | 040568741
  |      |         |          |         |      |      |         |         | 0711548956
 |       |         |          |         |      |      |         |         | 03316014040
  |      |         |          |         |      |      |         |         | 0698875641
  |      |         |          |         |      |      |         |         | 0301234567

nachher:
Code:
| anrede | vorname | nachname | strasse | plz  | ort  | vorwahl | telefon  | vrn          |
+--------+---------+----------+---------+------+------+---------+----------+--------------+
   |0308422777      |          |          |       |                | 030     | 8422777
     |040568741        |          |         |      |                | 040     | 568741
   |  0711548956     |          |         |      |                 | 0711    | 548956
  |  03316014040   |          |         |      |                  | 0331    | 6014040
   |0698875641      |          |         |      |                  | 069     | 8875641
   |0301234567      |          |         |      |                  | 030     | 1234567

aber dieser Zeilenumbruch ist immer noch da?
Vielleicht sollte ich mir mal eine neuere Version von mysql installieren...
 
Hallo Markus, ich habe mir nun die Version 5.0 installiert.
Bei deiner ersten Variante bekomme ich die Meldung:
Code:
mysql> UPDATE adressen a
    -> SET vorwahl = (SELECT vorwahl FROM vorwahlen
    -> WHERE a.vrn LIKE CONCAT(vorwahlen.vorwahl, '%')),
    -> telefon = SUBSTRING(vrn FROM LENGTH(vorwahl)+1);
ERROR 1242 (21000): Subquery returns more than 1 row
Bei deiner zweiten und dritten Variante wird die Query ausgeführt, allerdings habe ich hier wieder den Zeilenumbruch im Feld telefon:
Code:
mysql> select * from adressen;
+--------+---------+----------+---------+------+------+---------+----------+--------------+
| anrede | vorname | nachname | strasse | plz  | ort  | vorwahl | telefon  | vrn          |
+--------+---------+----------+---------+------+------+---------+----------+--------------+
  | 308422777      |          |         |      |      | 030     | 8422777
   | 40568741      |          |         |      |      | 040     | 568741
  | 0711548956     |          |         |      |      | 0711    | 548956
 | 03316014040     |          |         |      |      | 0331    | 6014040
  | 698875641      |          |         |      |      | 069     | 8875641
  | 301234567      |          |         |      |      | 030     | 1234567
+--------+---------+----------+---------+------+------+---------+----------+--------------+
6 rows in set (0.00 sec)
Ich kann mir nicht erklären, wie hier der Zeilenumbruch entsteht?
 
Hallo nochmal,

mhm ja wenn die Subquery mehrere Ergebnisse liefert, stimmt irgendwas nicht. Dann sind die Vorwahlen irgendwo nicht eindeutig.

Zu dem Problem mit dem Zeilenumbrüchen - keine Ahnung. Wie hast du denn deine Tabelle definiert? VARCHAR oder CHAR ? Ich hab jetzt grad keine Idee, aber das kannst du ja nochmal prüfen und hier posten, eventuell hat es einen Einfluss auf die Darstellung.

Markus
 

Neue Beiträge

Zurück