J'ai une liste de noms et je souhaite séparer les premiers et derniers mots du nom d'une personne.
J'essayais d'utiliser la fonction "couper" sans succès. P>
Quelqu'un peut-il expliquer comment puis-je le faire? p>
Table: P>
Names Mary Smith Dinah Donald Paul Silver
3 Réponses :
Vous pouvez le faire simplement avec des expressions régulières, comme:
substring(trim(name) FROM '^([^ ]+)') || ' ' || substring(trim(name) FROM '([^ ]+)$')
Shiftplanning.com a fait cela exactement récemment. Ils ont estimé les noms des personnes algorithmiques, mais leur ont demandé de confirmer / corriger.
Une autre approche, qui profite du traitement des chaînes Postgres, des fonctions intégrées:
SELECT split_part(name, ' ', 1) as first_token, split_part(name, ' ', array_length(regexp_split_to_array(name, ' '), 1)) as last_token FROM mytable
string_to_array () code> serait suffisant, pas de regex requis (le regexp_split_to_array code> est beaucoup plus lent, alors string_to_array () code>)
Voici comment j'ai extrait les noms complets des courriels avec un point d'un point, par exemple Jeremy.thompson@abc.com résultat: p> Jeremy | Thompson p>
blockQuote> Vous pouvez facilement remplacer le point avec un espace: p>
C'est fondamentalement un problème insoluble. Stackoverflow.com/Questtions/1122328/...
Garniture () code> n'a vraiment pas de sens pour ce problème. Peut-être pourriez-vous nous montrer ce que vous avez essayé - Montrez-vous le code américain! - Et nous pouvons vous aider à faire quelque chose qui fonctionne pour cet ensemble limité d'entrées. I>Voulez-vous faire cela avec votre requête? Il serait assez facile de faire dans votre langage de script de côté serveur (PHP peut-être?) ... Regardez dans
exploser () code>A.o. J'ai essayé de le faire à Postgres mais pas de succès. Je veux dire que j'ai essayé d'utiliser la garniture, mais cela n'a pas fonctionné du tout. Y a-t-il une autre fonction que vous pourriez savoir à Postgres, quelque chose comme: premier ("ma chaîne") et dernier ("ma chaîne")? Merci,
Comment avez-vous l'intention de gérer un nom comme
joão da nova code>? Le nom de famille estda nova code>. Ou de nombreux autres cas où les noms de famille contiennent des espaces. Sérieusement, n'essayez pas cela, c'est faux i>. kalzumeus.com/2010/06/17/... . Le seul moyen de séparer les prénoms et les noms de famille est de demander à la personne dont il est le nom. Et même alors, vous devez être prêt à les faire répondre "Eh bien, je n'ai pas de nom de famille" ou "Eh bien, je n'ai pas de prénom". Ou "quel nom de famille, j'ai trois différents". Ou "Pinyin ou personnages chinois simplifiés?"@CRAIG: encore moins de cultures qui mettent le nom de famille avant le nom donné ou les noms de famille tels que "van den heuvel". Les noms sont fous compliqués.
Ok personnes, j'ai essayé quelque chose qui a fonctionné pour le prénom: Sélectionnez la sous-chaîne (nom de '^. *? (? = [])') Comme nom de tableau. Cela a résolu le problème avec le prénom. Quelqu'un peut-il me dire comment puis-je obtenir le nom de famille à l'aide de la sous-chaîne ... quelque chose comme Joao da Silva, alors après que le dernier espace, me renvoie "Silva". C'est de quoi j'ai besoin. Je n'essaie pas d'ouvrir une discussion sur si un nom devrait être comme celui-ci ou de cette façon. Dans mon cas particulier, j'ai juste besoin d'avoir ces informations comme décrit ici. Merci de m'aider, Samuel
@Samueldonadelli pour que vous ne souhaitiez pas réellement le "nom de famille", vous voulez "le dernier mot dans une chaîne".
@Cragringer merci pour les mains vers le haut. Je viens de modifier la question avec votre clarification.