WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 01.03.2005, 22:59   #1
ff
Veteran
 
Registriert seit: 13.11.1999
Beiträge: 466


Standard 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
ff ist offline   Mit Zitat antworten
Alt 02.03.2005, 07:37   #2
pc.net
Aussteiger
 
Benutzerbild von pc.net
 
Registriert seit: 07.10.2001
Ort: Nettistan
Beiträge: 12.997

Mein Computer

Standard

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
____________________________________
Praktizierender Eristiker

No hace falta ser un genio para saber quién dijo eso.
Der wirklich faule Mensch ist oft extrem fleißig, denn er will möglichst schnell wieder faul sein.
pc.net ist offline   Mit Zitat antworten
Alt 02.03.2005, 09:24   #3
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

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
T.dot ist offline   Mit Zitat antworten
Alt 02.03.2005, 09:26   #4
käptn
Inventar
 
Registriert seit: 04.11.2001
Alter: 45
Beiträge: 2.150


Standard

Klar, da das das falsche REPLACE ist.

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

~
____________________________________
LOL - Mein erstes Post im Programmier Forum

MACINTOSH - Most Applications Crash, If Not The Operating System Hangs
käptn ist offline   Mit Zitat antworten
Alt 02.03.2005, 10:43   #5
ff
Veteran
 
Registriert seit: 13.11.1999
Beiträge: 466


Daumen hoch

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 ist offline   Mit Zitat antworten
Alt 02.03.2005, 11:01   #6
ff
Veteran
 
Registriert seit: 13.11.1999
Beiträge: 466


Standard

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
ff ist offline   Mit Zitat antworten
Alt 02.03.2005, 13:41   #7
pc.net
Aussteiger
 
Benutzerbild von pc.net
 
Registriert seit: 07.10.2001
Ort: Nettistan
Beiträge: 12.997

Mein Computer

Standard

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
;
____________________________________
Praktizierender Eristiker

No hace falta ser un genio para saber quién dijo eso.
Der wirklich faule Mensch ist oft extrem fleißig, denn er will möglichst schnell wieder faul sein.
pc.net ist offline   Mit Zitat antworten
Alt 02.03.2005, 18:07   #8
käptn
Inventar
 
Registriert seit: 04.11.2001
Alter: 45
Beiträge: 2.150


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...

~
____________________________________
LOL - Mein erstes Post im Programmier Forum

MACINTOSH - Most Applications Crash, If Not The Operating System Hangs
käptn ist offline   Mit Zitat antworten
Alt 02.03.2005, 23:12   #9
ff
Veteran
 
Registriert seit: 13.11.1999
Beiträge: 466


Standard

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
ff ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:34 Uhr.


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