Divisione dei dati nelle colonne

Pulizia dei dati nei database PostgreSQL

Darryl Reeves, Ph.D.

Industry Assistant Professor, New York University

Dividere le colonne

 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... | ...
 ...      | ...             | ...                                             | ...
Pulizia dei dati nei database PostgreSQL

Trovare la posizione iniziale con STRPOS()

STRPOS(source_string, search_string)

Diagramma di una stringa di violazione "09B Thawing procedures". Sotto sono indicizzati i caratteri: 1 al primo 0, 4 al primo spazio e 22 alla s finale.

SELECT
  STRPOS('09B Thawing procedures', ' ');
4
Pulizia dei dati nei database PostgreSQL

Trovare la posizione iniziale con STRPOS()

Diagramma di una stringa di violazione "09B Thawing procedures". Sotto sono indicizzati i caratteri: 1 al primo 0, 4 al primo spazio e 22 alla s finale.

SELECT
  STRPOS('09B Thawing procedures', '?');
0
Pulizia dei dati nei database PostgreSQL

Trovare la posizione iniziale con STRPOS()

Diagramma di una stringa di violazione "09B Thawing procedures". Sotto sono indicizzati i caratteri: 1 al primo 0, 4 al primo spazio e 22 alla s finale.

SELECT
  STRPOS('09B Thawing procedures', ' ');
4
Pulizia dei dati nei database PostgreSQL

Estrarre una sottostringa con SUBSTRING()

SUBSTRING(source_string FROM start_pos FOR num_chars)

Pulizia dei dati nei database PostgreSQL

Estrarre una sottostringa con SUBSTRING()

SUBSTRING('Homerun' FROM 1 FOR 4)Home

Diagramma di una stringa di violazione "09B Thawing procedures". Sotto sono indicizzati i caratteri: 1 al primo 0, 4 al primo spazio e 22 alla s finale.

SELECT
  SUBSTRING(
      '09B Thawing procedures'
      FROM 1
      FOR STRPOS('09B Thawing procedures', ' ') - 1
  );
09B
Pulizia dei dati nei database PostgreSQL

Estrarre una sottostringa con SUBSTRING()

Diagramma di una stringa di violazione "09B Thawing procedures". Sotto sono indicizzati i caratteri: 1 al primo 0, 4 al primo spazio e 22 alla s finale. Una coppia di frecce blu indica dove si trova la descrizione della violazione, che copre solo questa parte della stringa.

Requisiti:

  • Posizione iniziale della descrizione della violazione
  • Numero di caratteri della descrizione
SELECT
  STRPOS('09B Thawing procedures', ' ') + 1;
5
Pulizia dei dati nei database PostgreSQL

Calcolare la lunghezza con LENGTH()

Diagramma di una stringa di violazione "09B Thawing procedures". Sotto sono indicizzati i caratteri: 1 al primo 0, 4 al primo spazio e 22 alla s finale. Sopra la parte di descrizione è scritto "numero di caratteri?".

LENGTH(string)INTEGER

SELECT LENGTH('hello')
5
Pulizia dei dati nei database PostgreSQL

Calcolare la lunghezza con LENGTH()

LENGTH('09B Thawing procedures')22

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

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

LENGTH('Thawing procedures')18

Pulizia dei dati nei database PostgreSQL

Calcolare la lunghezza con LENGTH()

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

Diagramma di una stringa di violazione "09B Thawing procedures". Sotto sono indicizzati i caratteri: 1 al primo 0, 4 al primo spazio e 22 alla s finale. Una coppia di frecce blu indica dove si trova la descrizione della violazione, che copre solo questa parte della stringa.

Pulizia dei dati nei database PostgreSQL

Mettere tutto insieme

SELECT 
    SUBSTRING(
      '09B Thawing procedures'
      FROM
        STRPOS('09B Thawing procedures', ' ')
        + 1
      FOR
        LENGTH('09B Thawing procedures')
        - STRPOS('09B Thawing procedures', ' ')
    );
Thawing procedures
Pulizia dei dati nei database PostgreSQL

Dividere la colonna 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;
Pulizia dei dati nei database PostgreSQL

Dividere la colonna 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... | ...
 ...      | ...             | ...                                             | ...
Pulizia dei dati nei database PostgreSQL

Dividere la colonna 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... | ...
 ...      | ...             | ...            | ...                                         | ...
Pulizia dei dati nei database PostgreSQL

Passiamo alla pratica!

Pulizia dei dati nei database PostgreSQL

Preparing Video For Download...