Curso de Cleaning Data con SQL server

Autor: Luis Fernando Apáez


Cleaning messy strings

En esta clase trabajaremos con cadenas de texto que no tienen el formato que queremos.

Veamos por ejemplo, la siguiente tabla:

observamos en la columna name que algunos nombres tienen espacios en blanco al inicio y al final, así como más de un espacio en blanco al inicio del nombre.

Procedemos a eliminar estos espacios en blanco valiéndonos de la función TRIM():

TRIM([characters] string)

el cual elimina cualquier carácter especificado de una cadena de texto, lo cual es justo lo que buscamos. Si no especificamos un carácter, la función eliminará por default elcarácter correspondiente a espacios en blanco.

Por ejemplo

notamos que los espacios en blanco del inicio y el final se han eliminado. De tal forma, si deseamos que todos los nombres de la columna name estén sin espacios en blanco al inicio y al final, ejecutamos

Función REPLACE()

Observemos que en

en la columna airport_state hay 3 formas de referirse al estado de Florida: fl, FL y Florida. Supongamos que deseamos unificar estas tres formas a una sola, en la cual es de nuestro interés considerar sólo el nombre de Florida. PAra ello utilizaremos la función REPLACE():

REPLACE(string_to_replace, ocurrences, string_replacement)

que reemplaza todas las apariciones de una cadena especificada con otra cadena. El reemplazo no distingue entre mayúsculas y minúsculas de forma predeterminada.

Así, comenzamos por reemplazar la cadena FL por Florida

efectuando la misma consulta que antes, ya no obtenemos los nombre fl o FL para el estado de florida. Además, recordemos que no es necesario ejecutar la misma consulta para

REPLACE(airport_state, 'fl', 'Florida')

pues REPLACE() no distingue entre mayúsculas y minúsculas. Notamos también la existencia de un registro cuyo nombre asignado en airport_state es Floridaorida, pues, en aquellas palabras Florida que teníamos antes de aplicar REPLACE() se sustituyó Fl por Florida, de modo que obtuvimos

Fl ---> Florida
(Fl)orida ---> (Florida)orida

Para solucionar este problema podemos anidar la función REPLACE() como sigue

donde ahora reemplazamos todas las cadenas Floridaorida por Florida.

Una alternativa al código anterior es mediante las sentencias CASE-WHEN:

donde remplazamos FL por Florida en todos aquellos registros que no tengan previamente la palabra Florida, y en aquellos registros que no tengan FL dejaremos tal cual su registro. Esto último nos sirve para dejar intactos los registros que ya tienen la palabra Florida.

Otro ejemplo es si intentamos unificar la forma de referirnos a Florida como FL. Un primer intento:

pero notamos que la forma fl continúa en los registros, es decir, lo anterior no soluciona del todo el problema. No obstante, nos podemos valer de la función UPPER():

donde convertimos todos los fl a FL mediante la función UPPER() (la cual convierte cadenas de letras minúsculas a cadenas de letras mayúsculas).