2010-09-22 3 views
1

Bonjour les gars J'ai une requête entièrement fonctionnelle, mais j'ai besoin de faire un peu de formatage. Un de mes champs s'appelle un nom de route. Un exemple de données dans ce champ est "PRN L5 L7 S LAM C"SQL 2005 Format Question

Maintenant, ce que je dois faire est d'abord supprimer le PRN, deuxièmement diviser la route en colonnes séparées, de sorte que la colonne 1 aurait L5, colonne 2 aurait L7 ect ....

Maintenant, les opérations de route (L5, L7, LAM) auraient soit 1,2 ou 3 caractères dans aucun ordre paticular. Tout le monde a des idées?

+0

est le dernier charecter "C" aussi une route (ou) utilisé pour indiquer autre chose ..? –

+0

Diviser en lignes avec une colonne Sequence sera plus facile et plus proche de la meilleure pratique que de la diviser en colonnes ... – ErikE

Répondre

2

Je chercherais à créer une fonction CLR qui utilise des expressions régulières.

Voir ce lien: http://msdn.microsoft.com/en-us/magazine/cc163473.aspx

de l'article:

[SqlFunction] 
public static SqlChars RegexGroup( 
    SqlChars input, SqlString pattern, SqlString name) 
{ 
    Regex regex = new Regex(pattern.Value, Options); 
    Match match = regex.Match(new string(input.Value)); 
    return match.Success ? 
     new SqlChars(match.Groups[name.Value].Value) : SqlChars.Null; 
} 
2

Vous pouvez également créer une fonction split http://www.kodyaz.com/articles/sql-server-t-sql-split-function.aspx

+0

Split est bon, ajoutez simplement un argument de plus '@splitChar' pour que l'utilisateur puisse séparer une chaîne sur n'importe quel caractère il aime. – Kashif

+0

Cela vous permet d'obtenir toutes les données dans une seule colonne. Vous auriez alors besoin d'un type de pivot dynamique pour obtenir des colonnes séparées comme requis par l'OP. –