Scinder les données d'une colonne

Nettoyer des données dans des bases de données PostgreSQL

Darryl Reeves, Ph.D.

Industry Assistant Professor, New York University

Scinder des colonnes

 camis    | inspection_date |                    violation                    | ... 
 ---------+-----------------+-------------------------------------------------+-----
 ...      | ...             | ...                                             | ...
 50038736 | 03/29/2018      | 09B Thawing procedures                          | ...
 50033304 | 12/18/2019      | 02B Hot food item not held at or above 140º ... | ...
 50081658 | 12/13/2018      | 06F Wiping cloths soiled or not stored in sa... | ...
 50033733 | 02/12/2019      | 10B Plumbing not properly installed or maint... | ...
 40559634 | 08/22/2017      | 04N Filth flies or food/refuse/sewage-associ... | ...
 ...      | ...             | ...                                             | ...
Nettoyer des données dans des bases de données PostgreSQL

Trouver la position de départ avec STRPOS()

STRPOS(source_string, search_string)

Schéma d'une chaîne d'infraction « 09B Thawing procedures ». Le schéma montre des index : 1 sous le 0, 4 au premier espace, et 22 sous le s final.

SELECT
  STRPOS('09B Thawing procedures', ' ');
4
Nettoyer des données dans des bases de données PostgreSQL

Trouver la position de départ avec STRPOS()

Schéma d'une chaîne d'infraction « 09B Thawing procedures ». Le schéma montre des index : 1 sous le 0, 4 au premier espace, et 22 sous le s final.

SELECT
  STRPOS('09B Thawing procedures', '?');
0
Nettoyer des données dans des bases de données PostgreSQL

Trouver la position de départ avec STRPOS()

Schéma d'une chaîne d'infraction « 09B Thawing procedures ». Le schéma montre des index : 1 sous le 0, 4 au premier espace, et 22 sous le s final.

SELECT
  STRPOS('09B Thawing procedures', ' ');
4
Nettoyer des données dans des bases de données PostgreSQL

Extraire une sous-chaîne avec SUBSTRING()

SUBSTRING(source_string FROM start_pos FOR num_chars)

Nettoyer des données dans des bases de données PostgreSQL

Extraire une sous-chaîne avec SUBSTRING()

SUBSTRING('Homerun' FROM 1 FOR 4)Home

Schéma d'une chaîne d'infraction « 09B Thawing procedures ». Le schéma montre des index : 1 sous le 0, 4 au premier espace, et 22 sous le s final.

SELECT
  SUBSTRING(
      '09B Thawing procedures'
      FROM 1
      FOR STRPOS('09B Thawing procedures', ' ') - 1
  );
09B
Nettoyer des données dans des bases de données PostgreSQL

Extraire une sous-chaîne avec SUBSTRING()

Schéma d'une chaîne d'infraction « 09B Thawing procedures ». Le schéma montre des index : 1 sous le 0, 4 au premier espace, et 22 sous le s final. Deux flèches bleues indiquent la portion contenant la description de l'infraction.

Exigences :

  • Position de début de la description
  • Nombre de caractères de la description
SELECT
  STRPOS('09B Thawing procedures', ' ') + 1;
5
Nettoyer des données dans des bases de données PostgreSQL

Calculer la longueur d'une chaîne avec LENGTH()

Schéma d'une chaîne d'infraction « 09B Thawing procedures ». Le schéma montre des index : 1 sous le 0, 4 au premier espace, et 22 sous le s final. La mention « nombre de caractères ? » figure au-dessus de la description.

LENGTH(string)INTEGER

SELECT LENGTH('hello')
5
Nettoyer des données dans des bases de données PostgreSQL

Calculer la longueur d'une chaîne avec LENGTH()

LENGTH('09B Thawing procedures')22

STRPOS('09B Thawing procedures', ' ')4

LENGTH('09B Thawing procedures') - STRPOS('09B Thawing procedures', ' ')18

LENGTH('Thawing procedures')18

Nettoyer des données dans des bases de données PostgreSQL

Calculer la longueur d'une chaîne avec LENGTH()

SELECT 
    LENGTH('09B Thawing procedures') - 
    STRPOS('09B Thawing procedures', ' ');
18

Schéma d'une chaîne d'infraction « 09B Thawing procedures ». Le schéma montre des index : 1 sous le 0, 4 au premier espace, et 22 sous le s final. Deux flèches bleues indiquent la portion contenant la description de l'infraction.

Nettoyer des données dans des bases de données PostgreSQL

Assembler le tout

SELECT 
    SUBSTRING(
      '09B Thawing procedures'
      FROM
        STRPOS('09B Thawing procedures', ' ')
        + 1
      FOR
        LENGTH('09B Thawing procedures')
        - STRPOS('09B Thawing procedures', ' ')
    );
Thawing procedures
Nettoyer des données dans des bases de données PostgreSQL

Scinder la colonne violation

SELECT 
    camis, 
    inspection_date, 

    SUBSTRING(
      violation 
      FROM 1 
      FOR STRPOS(violation, ' ') - 1
    ) AS violation_code, 

    SUBSTRING(
      violation 
      FROM STRPOS(violation, ' ') + 1 
      FOR LENGTH(violation) - STRPOS(violation, ' ')
    ) AS violation_description 
FROM 
    restaurant_inspection;
Nettoyer des données dans des bases de données PostgreSQL

Scinder la colonne violation

 camis    | inspection_date |                    violation                    | ... 
 ---------+-----------------+-------------------------------------------------+-----
 ...      | ...             | ...                                             | ...
 50038736 | 03/29/2018      | 09B Thawing procedures                          | ...
 50033304 | 12/18/2019      | 02B Hot food item not held at or above 140º ... | ...
 50081658 | 12/13/2018      | 06F Wiping cloths soiled or not stored in sa... | ...
 50033733 | 02/12/2019      | 10B Plumbing not properly installed or maint... | ...
 40559634 | 08/22/2017      | 04N Filth flies or food/refuse/sewage-associ... | ...
 ...      | ...             | ...                                             | ...
Nettoyer des données dans des bases de données PostgreSQL

Scinder la colonne violation

 camis    | inspection_date | violation_code |            violation_description            | ... 
 ---------+-----------------+----------------+---------------------------------------------+-----
 ...      | ...             | ...            | ...                                         | ...
 50038736 | 03/29/2018      | 09B            | Thawing procedures                          | ...
 50033304 | 12/18/2019      | 02B            | Hot food item not held at or above 140º ... | ...
 50081658 | 12/13/2018      | 06F            | Wiping cloths soiled or not stored in sa... | ...
 50033733 | 02/12/2019      | 10B            | Plumbing not properly installed or maint... | ...
 40559634 | 08/22/2017      | 04N            | Filth flies or food/refuse/sewage-associ... | ...
 ...      | ...             | ...            | ...                                         | ...
Nettoyer des données dans des bases de données PostgreSQL

Passons à la pratique !

Nettoyer des données dans des bases de données PostgreSQL

Preparing Video For Download...