Je voudrais capitaliser les noms correctement, ce qui signifie dans ce cas:Capitaliser noms correctement dans SQL
- La première lettre est en majuscule.
- La première lettre après un espace est en majuscule ('Van Helsing', pas 'Van Helsing')
- La première lettre après un tableau de bord est capitalisé ('Johnson-Smith', pas 'Johnson-Smith')
- Aucune autre lettre n'est en majuscule.
Les premières et dernières exigences sont faciles à manipuler:
CONCAT(LEFT(name, 1), LOWER(RIGHT(name, LENGTH(name) - 1)))
Les autres sont plus difficiles. J'ai écrit une déclaration imbriqué-54 fois REPLACE (non à la main bien sûr, je Excel)
REPLACE(REPLACE(REPLACE(REPLACE(...,' b',' B'),'-b','-B'),' a',' A'),'-a','-A')
mais je me sens comme il doit y avoir une solution plus élégante et maintenable. Des idées?
S'il y a une fonction intégrée qui est similaire mais pas identique à mes besoins, cela ira probablement bien.
Edit: Ce script ne fonctionne que sur les noms qui ont perdu leur capitalisation déjà, il n'y a donc pas de danger dans le mal-traitement des noms obscurs. Manipuler des apostrophes comme des espaces et des tirets serait bien, cependant. Un coup d'œil à travers les données actuelles montre que beaucoup (~ 30%) des noms ont au moins un de [- '].
La « solution plus élégante » est de stocker les données dans le format que vous souhaitez commencer. Ou utilisez un script pour le sortir et le reformater. SQL n'est vraiment pas le bon outil pour cela. –
Je devrais retirer les données et utiliser Perl, mais s'il y avait une bonne méthode en SQL je préférerais l'utiliser. – Charles