web-dev-qa-db-fra.com

Fractionner une chaîne délimitée par des virgules -> FUNCTION db.CHARINDEX n'existe pas

J'ai besoin de diviser la chaîne délimitée par des virgules en une deuxième colonne J'ai le tableau suivant:

CL1     POS                 POS2     LENGHT     ALLELE
1       3015108,3015109              5          A
2       3015110,3015200              10         B
3       3015200,3015300              15         C
4       3015450,3015500              20         D
5       3015600,3015700              15         E

Je veux diviser les nombres après la virgule en une deuxième colonne POS2 Donc ça devrait être comme ça

CL1     POS                 POS2     LENGHT     ALLELE
1       3015108             3015109  5          A
2       3015110             3015200  10         B
3       3015200             3015300  15         C
4       3015450             3015500  20         D
5       3015600             3015700  15         E

J'ai donc demandé ce qui suit:

INSERT INTO MyTable (POS2)
SELECT RIGHT(POS, CHARINDEX(',', POS) + 1 ) FROM MyTable ;


 It returns an error : 
 ERROR 1305 (42000): FUNCTION test.CHARINDEX does not exist
18
madkitty

MySQL n'a pas de fonction CHARINDEX() intégrée. LOCATE() serait l'équivalent de MySQL.

Utiliser SUBSTRING_INDEX() pourrait être une façon plus succincte de le faire. Quelque chose comme ça (avertissement: non testé):

SUBSTRING_INDEX(POS, ',', 1) pour POS

SUBSTRING_INDEX(POS, ',', -1) pour POS2


En passant, je peux mal comprendre ce que vous essayez d'accomplir, mais il semble que vous souhaitiez peut-être UPDATE les lignes existantes, pas INSERT les nouvelles? Quelque chose comme:

UPDATE MyTable SET POS2 = SUBSTRING_INDEX(POS, ',', -1);
UPDATE MyTable SET POS = SUBSTRING_INDEX(POS, ',', 1);
31
Wiseguy

MySQL a une fonction similaire: InStr ou pour la même syntaxe Locate.

3
bill