WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Bitte um sql-Nachhilfe (http://www.wcm.at/forum/showthread.php?t=160092)

ff 01.03.2005 22:59

Bitte um sql-Nachhilfe
 
In einer mysql-Tabelle "personen" sind in der Spalte "bemerkung" z.B. folgende Eintraege:

------- bemerkung --------
"Hans hat ein blaues Auto"
"Susi hat blaue Lippen"
"Karl ist oft blau"

Wie lautet die genaue sql-Syntax, um den Substring "blau" in "rot" zu aendern und das Ganze vermutlich mittels UPDATE abzuspeichern?

Danke!
ff

pc.net 02.03.2005 07:37

unter oracle gehts so:
Code:

update personen
set bemerkung = replace(bemerkung, 'blau', 'rot')
;

zu mysql hab ich aber widersprüchliche infos gefunden:
http://webxadmin.free.fr/article.php?i=155
http://dev.mysql.com/doc/mysql/en/replace.html

T.dot 02.03.2005 09:24

Wennst n select machst funktionierts auf jeden Fall auch mit replace(spalte,'blau','dunkelhellschwarz'), müsst also bei Update auch so sein.

Wenn man in der mysql-hilfe richtig sucht (*zwinker zu pc.net*) findet mans hier:
http://dev.mysql.com/doc/mysql/en/string-functions.html

mfg Thomas

käptn 02.03.2005 09:26

Klar, da das das falsche REPLACE ist.

Dein Link führt auf REPLACE wie "Wenn Datensatz existiert UPDATE, sonst INSERT)"

~

ff 02.03.2005 10:43

Code:

for ($handshake=0; $handshake < 1000; $handshake++) {
    print "DANKE!";
}

SELECT REPLACE(bemerkung, 'blau', 'rot') FROM personen WHERE bemerkung LIKE '%Susi%'

zaubert die Vorschau auf den Bildschirm und

UPDATE personen SET bemerkung = REPLACE(bemerkung, 'rot', 'Marcel') WHERE bemerkung LIKE '%Susi%'

geht dann an die Susi so richtig heran . . . ;)

lg
ff

ff 02.03.2005 11:01

Ich will nicht unverschaemt sein, aber wenn ihr Profis zufaellig eine Ergaenzung dazu herumliegen habt, die eine Spalte "namen" von:

----------- namen --------------
Friedrich Schiller
Johann Wolfgang von Goethe
--------------------------------

auf

----------- namen --------------
Schiller, Friedrich
Goethe, Johann Wolfgang von
--------------------------------

aendert, dann postet sie bitte!

Danke!
ff

pc.net 02.03.2005 13:41

naja, da wirst wohl um die befehle SUBSTR, INSTR und LENGTH nicht herumkommen ...
Code:

select substr(namen, instr(namen,' ',-1), length(namen)-instr(namen,' ',-1)+1) || ', ' ||
      substr(namen, 1, instr(namen,' ',-1)-1)
from personen
;


käptn 02.03.2005 18:07

MySQLs INSTR() kennt anscheinend keinen dritten Parameter...

Ein Würgaround wie folgender...
Code:

UPDATE
    table
SET
    name = CONCAT(
        SUBSTRING_INDEX(name, ' ', -1),
        ', ',
        SUBSTRING(
            name, 0,
            LENGTH(name) -
            LENGTH(
                SUBSTRING_INDEX(name, ' ', -1)
            )
        )

...sollte es aber auch schaffen.

Enthält der Nachname aber Leerzeichen, dann... ;)

~

ff 02.03.2005 23:12

Nochmals herzlichen Dank fuer eure Anregungen! Das hat mir viel Sucherei erspart. Vorerst funktionierten die Codes aber leider nicht. Auch das Ergaenzen der fehlenden Klammer bei Käptn brachte nicht das gewuenschte Ergebnis. Mit etwas Herumschlichten und Trial&Error habe ich es aber dann doch geschafft. Vermutlich ist das SO nicht der optimale Weg, aber es funktioniert - abgesehen von den bloeden Doppelnamen. Die muss ich halt nachbearbeiten. Goethe, Johann > Goethe, Johann Wolfgang von


--------------------------------------------------------------------
---- Vorschau - z.B. Friedrich Schiller > Schiller, Friedrich ------
--------------------------------------------------------------------
Code:

SELECT namen,
      CONCAT(SUBSTRING_INDEX(namen, ' ', -1),
              ', ',
              CONCAT(SUBSTRING_INDEX(namen, ' ', 1)
              )
      )
FROM zitate WHERE namen LIKE '%%'

--------------------------------------------------------------------
---- Speichern - z.B. Friedrich Schiller > Schiller, Friedrich -----
--------------------------------------------------------------------
Code:

UPDATE zitate SET namen =
      CONCAT(SUBSTRING_INDEX(namen, ' ', -1),
              ', ',
              CONCAT(SUBSTRING_INDEX(namen, ' ', 1)
              )
      )
WHERE namen LIKE '%%'

lg
ff


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag