2009-10-02 4 views
0

Est-ce que quelqu'un connaît l'utilisation de LOCATE avec une chaîne varialbe transmise? J'essaie de l'utiliser pour déterminer s'il y a une virgule dans une chaîne qui a été définie dans la procédure stockée mais qui n'a pas réussi à la faire fonctionner correctement. Mon code ressemble à ceciUtilisation de la fonction de chaîne LOCATE dans une procédure stockée

DECLARE string VARCHAR(10); 
    DECLARE comma_found INT; 

    SET string = 'hello, world'; 

    SET comma_found = SELECT LOCATE(',',string); 

    IF(comma_found <> 0) THEN 

     ...execute code.... 

    END IF; 

Ce code ne sera pas complie en raison du SELECT et je ne peux localisons pas comprendre ce qui est faux. Est-ce ma syntaxe? Usage? Y a-t-il une autre fonction de maniuplation de chaînes que je peux utiliser pour accomplir ceci? Je le fais dans une procédure stockée dans Mysql.

Répondre

0

Eh bien, la syntaxe de LOCATE est LOCATE (sous-chaîne, chaîne). Votre requête indique littéralement LOCATE (',', chaîne) où chaîne est un varchar (10). Votre chaîne est en fait plus de 10 caractères si = P

+0

La syntaxe est correcte mais il est susceptible d'avoir une erreur de troncature que vous avez noté - mais il n'y a pas raison pour laquelle la virgule ne peut pas être détectée de cette façon ... – Basic

2

Je ne l'ai pas utilisé MySQL depuis longtemps, donc je ne suis pas tout à fait familier avec la nouvelle syntaxe, mais de quelques googler, je crois

SET comma_found = SELECT LOCATE(',',string); 

devrait être

SELECT @comma_found := LOCATE(',',string); 

vous pouvez utiliser @comma_found par exemple:

SELECT @comma_found 

Il semble que vous essayez d'affecter un ensemble de données à la variable plutôt que le résultat de la LOCATE

Voir ici: http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

Questions connexes