jueves, junio 25, 2015

Remplazar fragmento de texto contenido en los registros de una columna con SQL

Existe un inconveniente con algunas limitaciones en bases de datos como las de Access, el cual, no permiten con una simple función remplazar determinado texto por otro en una columna especifica.

En este caso se puede aplicar una sentencia SQL que permite realizar el propósito de manera pulcra .

Para lograrlo se combinan UPDATE, SET, Mid, InsStr, Len, WHERE y LIKE

UPDATE [nombre_tabla] SET [nombre_columna] = Mid([nombre_columna], 1, InStr([nombre_columna], 'texto a remplazar') -1) & 'nuevo texto' & Mid([nombre_columna], (InStr([nombre_columna], 'texto a remplazar') + Len ('texto a remplazar')), Len([nombre_columna])) WHERE [nombre_columna] LIKE '%texto a remplazar%'

No obstante resulta complejo repetir en cada uno de los campos descritos por ejemplo [nombre_columna] y 'texto a remplazar', en ese sentido lo ideal si se está haciendo la ejecución desde algún lenguaje de programación realizar una clase o función dedicada y asignarle variables alfanuméricas.

Un ejemplo en este fragmento en lenguaje C#

private void RemplazarTextoEnColumna(string nombreTabla, 
  string nombreColumna, string textoBuscar, string nuevoTexto)
{
 //"oleDbConnection" hace referencia a la clase de forma ilustrativa que debe 
 //existir con los datos de conexión y tipo de base de datos 
 oleDbConnection.executeSqlCommand(String.Format(
  @"UPDATE [{0}] SET [{1}] = Mid([{1}], 1, InStr([{1}], '{2}') -1) & " + 
  "'{3}' & Mid([{1}], (InStr([{1}], '{2}') + Len ('{2}')), Len([{1}])) " + 
  "WHERE [{1}] LIKE '%{2}%'", 
  nombreTabla, nombreColumna, textoBuscar, nuevoTexto));
  
 //Opcional de acuerdo a lo que se busque
 oleDbConnection.CloseDataBase(); 
}

Cualquier comentario o sugerencia no duden en hacerlo.

0 comentarios: