Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi einzelnes Wort in SQL ändern (https://www.delphipraxis.net/86132-einzelnes-wort-sql-aendern.html)

XXcD 9. Feb 2007 18:35

Datenbank: MYSQL • Version: 5 • Zugriff über: PHP

einzelnes Wort in SQL ändern
 
Hallo,
ich habe folgendes problem, ich wollte ein Wort von mehreren in einer tabelle ändern und weiß nicht wie.

Beispiel: Tabelle Name: Hans Müstermann

Und jetzt will ich z.b. nur das "Mustermann" ändern. Wie könnte ich das mit SQL machen????

shmia 9. Feb 2007 18:57

Re: einzelnes Wort in SQL ändern
 
Deine Frage ist reichlich unpräzise:
Willst du Dateninhalte ändern oder Tabellen-/Feldnamen ändern ?
Man kann Dateninhalte nur im Gesamten ändern:
SQL-Code:
UPDATE TabelleXY SET Ansprechpartner='Hans Ohnesorg' WHERE Ansprechpartner='Hans Müstermann'

XXcD 9. Feb 2007 19:03

Re: einzelnes Wort in SQL ändern
 
Ne das muss gehen ich weiß nicht was vorher in der Tabelle steht also der soll mit einer angabe von Stellen das ändern. ich hab mal gelesen mit $nachname = Mustermann{36]. Dieses 36 steht dafür an welcher stelle das geändert wird, aber ich weiß nicht wie das genau gehen soll.

omata 9. Feb 2007 19:12

Re: einzelnes Wort in SQL ändern
 
Hallo XXcD,

versuch doch mal...
SQL-Code:
UPDATE TabelleXY
SET Ansprechpartner = REPLACE(Ansprechpartner, 'Müstermann', 'Mustermann')
WHERE ...
Gruss
Thorsten

XXcD 9. Feb 2007 19:37

Re: einzelnes Wort in SQL ändern
 
Ich glaube ich hab das immernoch falsch beschrieben. Ich meinte das so ich der Tabelle steht was und ich weiß nur dass das zweite wort geändert werden soll. Mit dem Mustermann das weiß ich garnicht dass das da steht.

omata 9. Feb 2007 20:13

Re: einzelnes Wort in SQL ändern
 
Dafür kennt MySQL leider keinen geeigneten Befehl...

Das musst du dann wohl selber basteln...
SQL-Code:
SELECT CASE WHEN INSTR(name, ' ') > 0 
         THEN CONCAT(
                SUBSTRING(name, 1, INSTR(name, ' ')),
                'Ersetzung',
                SUBSTRING(
                  name,
                  INSTR(name, ' ') + 1 +
                  INSTR(RIGHT(CONCAT(name, ' '), INSTR(name, ' ') + 1), ' '),
                  LENGTH(name))
                )
         ELSE name
       END name
FROM tabelle
Elegant ist das allerdings nicht.

Gruss
Thorsten

XXcD 9. Feb 2007 21:06

Re: einzelnes Wort in SQL ändern
 
Danke das hat mir schonmal weitergeholfen. Hat diese Prozedure vielleicht einen Namen den man bei google finden kann? Dann könnte ich mich damit noch ein wenig vertraut machen da ich kaum Ahnung von SQL habe.

omata 9. Feb 2007 21:34

Re: einzelnes Wort in SQL ändern
 
Welche Prozedur? Ich habe dir oben eine SQL-Abfrage geschrieben, in der ich einige SQL-Funktionen benutzt habe...

SQL-Code:
INSTR, CONCAT, SUBSTRING, RIGHT, LENGTH
Schau doch mal hier.

Gruss
Thorsten

XXcD 10. Feb 2007 15:58

Re: einzelnes Wort in SQL ändern
 
Ich kriege das einfach nicht hin *heul*. Sagen wir mal ich möchte das 43. Wort ändern. Wie müsste ich das dann machen????

omata 10. Feb 2007 16:11

Re: einzelnes Wort in SQL ändern
 
Was willst du da eigentlich genau machen? Meinst du das das sinnvoll ist solche Sachen direkt über ein SQL-Statement zu machen?

Verwunderte Grüsse
Thorsten

XXcD 10. Feb 2007 16:31

Re: einzelnes Wort in SQL ändern
 
Ich will über php ein onclick verfahren machen wenn man ein banner auf meiner website anklickt soll eine php dateiausgeführt werden und zwar der script mit dem sql. Und in dem script soll in einer spalte das 43. wort geändert werden.

jokerfacehro 10. Feb 2007 16:33

Re: einzelnes Wort in SQL ändern
 
du könntest das jeweilige feld einfach auslesen,
das ganze mit
Delphi-Quellcode:
$vorundnachname=explode(" ",$nameausderdatenbank);
$neuername=$vorundnachname[0].' '.$neuernachname;
mysql_query("UPDATE 'db' SET name='$neuername' WHERE name='$nameausderdatenbank'");
auseinander flücken und den ersten teil des arrays mit deinem neuen string wieder zusammensetzen
und dann das ganze in die db eintragen ;)

omata 10. Feb 2007 17:59

Re: einzelnes Wort in SQL ändern
 
So ein neuer Versuch.

In SQL bzw. einer Function auf dem DB-Server könnte das so aussehen...
SQL-Code:
CREATE FUNCTION func_myreplace (Source VARCHAR(1000),
                                NewWord VARCHAR(20),
                                WordIndex INT)
  RETURNS VARCHAR(1000)
BEGIN
  DECLARE i INT DEFAULT 0;
  DECLARE p INT DEFAULT 0;
  DECLARE g INT DEFAULT 0;
  DECLARE xSource VARCHAR(1000) DEFAULT '';
  IF WordIndex = 0 THEN
    SET xSource = CONCAT(NewWord, ' ', Source);
  END IF;
  WHILE p <= LENGTH(Source) AND WordIndex > 0 DO
    SET p = INSTR(Source, ' ');
    IF p = 0 THEN
      SET p = LENGTH(Source);
    END IF;
    WHILE (p < LENGTH(Source)) AND SUBSTRING(Source, p+1, 1) = ' ' DO
      SET p = p + 1;
    END WHILE;
    SET i = i + 1;
    IF WordIndex = i THEN
      SET xSource = CONCAT(xSource, NewWord);
      SET g = 1;
    ELSE
      SET xSource = CONCAT(xSource, SUBSTRING(Source, 1, p));
      SET p = p + 1;
    END IF;
    SET Source = SUBSTRING(Source, p, LENGTH(Source));
  END WHILE;
  IF WordIndex > 0 THEN
    IF WordIndex <> i+1 THEN
      SET xSource = CONCAT(xSource, Source);
    END IF;
    IF g = 0 THEN
      SET xSource = CONCAT(xSource, ' ', newWord);
    END IF;
  END IF;
  RETURN xSource;
END
Und der Aufruf...
SQL-Code:
UPDATE tabelle
SET spalte = func_myreplace(spalte, 'Neues Wort', 43)
WHERE ...
WordIndex = 0: Neues Wort wird vorne angehängt
WordIndex > Anzahl Wörter: Neues Wort wird hinten angehängt
0 < WordIndex <= Anzahl Wörter: Das n'te Wort wird durch das neue Wort ersetzt

Gruss
Thorsten

XXcD 11. Feb 2007 21:49

Re: einzelnes Wort in SQL ändern
 
Perfekt!!! Kann ich die funktion denn auch in PHP einbauen???

mkinzler 11. Feb 2007 22:08

Re: einzelnes Wort in SQL ändern
 
Zitat:

Perfekt!!! Kann ich die funktion denn auch in PHP einbauen???
Ja ist ja ne SP


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz