2010-12-09 24 views
1

Ma base de données contient un modèle de chaîne utilisé pour faciliter la modification de l'utilisateur via un script JS.MySQL: Mise en forme d'une chaîne

La chaîne est basiquement formaté comme ceci:

aaa[bbb#ccc]ddd[eee#fff]ggg 

le résultat que je cherche est

aaacccdddfffggg 

Je voudrais le faire lors de la sélection de la chaîne à partir de la base de données. Je suppose qu'une regex devrait faire l'affaire. Mais mes connaissances en regex sont plutôt limitées. Cependant, ce n'est pas une exigence, s'il existe une solution plus élégante au problème.

Répondre

1

Malheureusement, vous ne pouvez utiliser qu'un MySQL REGEXP dans une clause WHERE pour faire correspondre les valeurs. Vous ne pouvez pas les utiliser pour transformer des chaînes.

Vous devrez le faire côté client ou travailler avec l'autre String Functions. Un MID() ferait l'affaire, si les longueurs et les positions des sous-chaînes sont fixes. Si ce n'est pas le cas, utilisez POSITION() (ou LOCATE()) pour trouver les caractères spéciaux []#.

+0

Hé, ouais! Je vois ce que tu veux dire. Je ne pensais pas directement. Regex ne sont aucunement liés. Ma faute. :) Je vais essayer en utilisant POSITION(). – dotmartin

+0

@dotmartin: aucun regex ne serait vraiment le chemin à suivre si le format est nerveux - tout programmeur décent penserait à les utiliser, donc vous pensiez bien :). C'est juste que MySQL peut seulement les utiliser pour faire correspondre, donc vous auriez besoin d'une regexp côté client dans votre code Perl/PHP/Rails/.... – Konerak