UDF di SQL Server 2005 con regular expression

di , 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

UDF di SQL Server 2005 con regular expression (#855) 1010 2
| Condividi su: Twitter, Facebook, LinkedIn, Google+

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