Retour à la liste des articles Articles
4 minutes de lecture

Extraction de données d'une chaîne : SPLIT_PART dans PostgreSQL

Apprenez à utiliser split_part dans PostgreSQL pour extraire des données de chaînes de caractères.

Très souvent, nous souhaitons extraire des parties d'une chaîne de caractères lorsque nous travaillons avec des valeurs textuelles. Un exemple courant est lorsque nous avons un nom complet et que nous avons besoin de récupérer uniquement le nom de famille. Dans cet article, nous allons examiner comment le faire en utilisant split_part dans PostgreSQL, c'est-à-dire une fonction liée aux chaînes de caractères qui peut être utilisée pour extraire une sous-chaîne.

Pourquoi utiliser les fonctions de chaîne dans votre base de données ?

Il existe de nombreuses raisons pour lesquelles vous souhaitez utiliser des fonctions SQL de chaîne de caractères telles que split_part dans PostgreSQL dans votre base de données, mais la principale raison est de résoudre les problèmes courants de qualité des données. Dans un autre article intitulé "Comment supprimer les caracteres indesirables en SQL", nous avons examiné comment les fonctions de chaîne SQL courantes peuvent nous aider à contrôler la qualité de nos données. Dans cet article, nous allons principalement nous concentrer sur l'extraction de parties d'une chaîne de caractères pour une analyse plus approfondie.

Pour mieux comprendre, nous allons travailler avec une table contenant un échantillon de données de soins de santé créé par un médecin qui stocke toutes les informations sur ses patients dans cette seule table. La table contient le nom complet du patient, la date de sa visite, le diagnostic du médecin, le traitement qu'il a suggéré et les médicaments qu'il a prescrits.

Chaque fois qu'un patient se rend à son cabinet, le médecin crée un nouvel enregistrement et saisit manuellement ses notes dans la base de données. Nous allons principalement nous concentrer sur la colonne drugs_in_receipt. Si nous jetons un coup d'œil à la base de données ci-dessous, nous pouvons voir une liste de médicaments séparés par des virgules sous cette colonne.

Full_Name date diagnostic treatment Drugs_in_receipt
John Smith ’03/04/2016′ Flu rest “aspirin, paracetamol”
Mary Deep ’10/11/2016′ Food Poisoning Rest & diet “penicillin,paracetamol”
Agnes Jason ’03/12/2016′ flu rest “aspirin, paracetamol”
Johnny SMITH ’15/03/2017′ Food Poisoned Rest & diet “penicillin,paracetamol”
AGNES Jason ’19/072017′ angina Rest and don’t speak “amoxicillin”
Peter Duckerz ’10/10/2017′ Flu Rest “paracetamol”

Extraction d'une sous-chaîne à partir d'une chaîne avec SPLIT_PART de PostgreSQL

Supposons que le premier médicament de chaque liste soit le médicament principal que le patient devra prendre, et que notre médecin souhaite extraire le médicament principal de chaque liste sous la colonne drugs_in_receipt. Ce champ stocke la liste des médicaments prescrits par le médecin pour chaque cas. Comme nous l'avons déjà mentionné, ces noms de médicaments sont séparés par des virgules, comme "aspirine, paracétamol".

Nous allons utiliser la fonction PostgreSQL split_part pour extraire uniquement le premier nom de médicament de chaque enregistrement. Voici la requête que nous allons utiliser :

SELECT split_part(drugs_in_receipt, ',',1) as first_medicine
FROM  patient_data

La fonction PostgreSQL split_part prend trois arguments. Le premier est le nom du champ - dans ce cas, drugs_in_receipt. Le deuxième argument est le délimiteur (une virgule), et le troisième est la position de l'élément souhaité. Dans notre exemple, nous voulons le premier élément de la liste, nous passons donc 1 comme troisième argument.

first_medicine
“aspirin
“penicillin
“aspirin
“penicillin
“amoxicillin”
“paracetamol”

Si nous regardons de près le résultat, nous pouvons voir un guillemet ouvrant devant chaque nom de médicament. Comment pouvons-nous le supprimer ? Dans l'un de nos autres articles, nous avons appris comment utiliser la fonction SQL TRIM pour supprimer les caractères indésirables. Pour nos besoins, nous allons spécifier ce que nous voulons que trim supprime - les guillemets doubles.

SELECT trim( split_part( drugs_in_receipt , ',' , 1) , ' “” ')
FROM  patient_data
first_medicine
aspirin
penicillin
aspirin
penicillin
amoxicillin
paracetamol

Voilà ! C'était assez facile, n'est-ce pas ?

En savoir plus sur les fonctions SQL String

La fonction PostgreSQL split_part est l'un des outils les plus importants pour manipuler les entrées de chaînes de caractères dans votre base de données. Mais ce n'est qu'une des nombreuses fonctions utiles que vous devez apprendre si vous voulez maîtriser SQL. À cette fin, n'oubliez pas de consulter notre Fonctions SQL standards cours. Essayez-le gratuitement dès aujourd'hui !