2010-07-20 7 views
1

Je veux mettre à jour une colonne col dans le tableau tab, dont les données sont comme suit (séparés par des virgules, avec la virgule en-tête):Comment écrire ce genre de SQL dans MySQL?

,test,oh,whatever,...., 

Ce qui peut être trop long pour afficher, comment puis-je mettre à jour la colonne afin que seuls les premiers 10 mots sont laissés?

+2

Fix votre schéma en premier. Ne stockez pas les valeurs séparées par des virgules dans la base de données. En savoir plus sur la normalisation. – Naktibalda

+0

@Naktibalda vous ne savez pas si ces valeurs peuvent/doivent être normalisées. Ils pourraient être des chaînes arbitraires. –

+0

@Pekka: si elles n'étaient que des ficelles, il n'y aurait aucune exigence de les traiter comme des mots individuels. Je suis d'accord avec @Naktibalda, c'est-à-dire qu'il s'agit d'une violation de la première forme normale (1NF) qui nécessite des types de données scalaires. Considérons que cette conception NFNF a entraîné une question sur SO parce que le langage SQL manque d'opérateurs requis pour travailler avec des données à valeurs multiples parce qu'il suppose que tous les types de données sont scalaires. Utilisez l'outil correct pour le travail;) – onedaywhen

Répondre

2

Vous recherchez substring_index

UPDATE table 
SET column = SUBSTRING_INDEX(column, ',', 11) 

(ne vérifiez vos mises à jour avec SELECT avant de les exécuter)

0

Pas une réponse à votre question, mais je recommanderais de faire des choses comme ça au niveau de l'application, pas dans la base de données.

Vous ne dites pas quelle langue vous utilisez. En PHP, ce serait un travail pour la fonction wordwrap. Il est capable de couper intelligemment les cordes à la bonne position.

Vous pouvez également stocker la chaîne complète dans la base de données et effectuer la découpe au moment de la sortie, ce qui n'est pas une option non plus?

+0

Non, c'est pour le développement de l'environnement, les données sont foirées. – wamp

Questions connexes