UDF di SQL Server 2005 con regular expression

di Riccardo Golia, in SQL Server 2005,

L'integrazione di SQL Server 2005 con il CLR del .NET Framework permette di definire in modo programmatico tramite un linguaggio managed come C# stored procedure, trigger, UDF (User Defined Function) e UDT (User Defined Type). Questa caratteristica di SQL Server 2005 si rivela particolarmente comoda nel caso in cui sia necessario eseguire elaborazioni più o meno complesse sui tipi di dato primitivi (come le stringhe o i numeri) direttamente nel codice delle query.

Un esempio molto interessante è rappresentato dalla sostituzione delle occorrenze presenti all'interno di una stringa in base ad un'espressione regolare. In T-SQL esiste infatti unicamente la funzione REPLACE che consente la sostituzione esatta di sottostringhe all'interno di una stringa di partenza. Utilizzando la classe Regex del .NET Framework, è possibile ottenere una SqlFunction più potente, capace di operare le sostituzioni in base al controllo di espressioni regolari.

using System;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Text.RegularExpressions;


// UDF che esegue la sostituzione delle occorrenze presenti
// all'interno di una stringa in base ad un'espressione regolare

[SqlFunction()]
public static SqlString RegexReplace(SqlString input, SqlString pattern, SqlString replacement)
{

  // Se la stringa di input è nulla, allora str1 vale string.Empty
  string str1 = (input.IsNull) ? string.Empty : input.Value;

  // Se il pattern dell'espressione regolare è nullo, allora str2 vale string.Empty
  string str2 = (pattern.IsNull) ? string.Empty : pattern.Value;

  // Se la stringa da sostituire alle occorrenze è nulla, allora str3 vale string.Empty
  string str3 = (replacement.IsNull) ? string.Empty : replacement.Value;

  // Ignora il case nella valutazione dell'espressione regolare
  return new SqlString(Regex.Replace(str1, str2, str3, RegexOptions.IgnoreCase));
}

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi