2014-07-16 2 views
-2

sélectionner remplacer (nom, '%%', prénom) comme nouveau1 à partir des noms;mysql remplacer fonction résultats non attendus

Lorsque je l'exécute, le nom de famille est renvoyé. Pourquoi? Je m'attends à ce qu'il recherche les noms.lastname pour tout (%% wildcard) et retourne names.firstname.

Toute la syntaxe que j'ai passé en revue suggère que je fais ce droit, il semble si simple ...

+1

cette requête n'a pas de sens. Pourquoi ne pas simplement retourner 'select firstname'? – Ashalynd

+0

'replace()' ne prend pas les caractères génériques. Vous le confondez avec «j'aime». –

Répondre

0

Pourquoi?

L'expression REPLACE(lastname,'%%',firstname) retournera lastname, chaque fois que lastname ne contient pas deux caractères de signe pour cent contigus. Pourquoi? Parce que c'est le comportement documenté de la fonction REPLACE.

Le '%' est un caractère générique lorsqu'il est utilisé avec LIKE. C'est pas un caractère générique dans la fonction REPLACE().

L'expression dans votre question recherchera la valeur de lastname pour les occurrences de deux caractères de signe pour cent contigus, et remplacer les occurrences avec la valeur firstname.

Par exemple:

SELECT REPLACE('fee%%fi%%fo','%%','-dah ') AS foo 

foo     
------------------- 
fee-dah fi-dah fo 

(Je crois que cela répond à la question que vous avez posée.)

0

Qu'est-ce que vous essayez d'atteindre?

Je suis assez sûr wildcards ne sont pas autorisés à REPLACE, mais la façon dont vous l'avez écrit suggère que vous voulez SELECT le lastname avec tous ses caractères remplacés par la chaîne firstname, qui est le même que SELECT firstname.

Si vous devez changer la lastname dans le tableau, vous aurez besoin d'exécuter une UPDATE:

UPDATE names SET lastname=firstname 

Si vous souhaitez simplement une concaténation des deux alors SELECT CONCAT(lastname,' ', firstname) est votre jeu.

Questions connexes