2010-08-27 9 views
0

OK, le titre de la question est vague, mais voici le problème. J'ai une liste de noms de fichiers dans la première colonne d'une table appelée Fichiers dont je veux analyser les données qui sont délimitées par soulignement, mais parfois je veux sauter le trait de soulignement. Chaque nom de fichier est sous forme de:Utilisation de délimiteurs pour diviser une colonne dans T-SQL en ignorant les délimiteurs

distance1000_7_13_2010_1_13PM_AveryDennisonAD_2300008_10S_Lock.csv 

Ainsi, afin d'obtenir la date et l'heure, je veux diviser cette colonne sous la forme suivante:

Col_A = distance1000 
Col_B = 7_13_2010 
Col_C = 1_13PM 
Col_D = AveryDennisonAD 
Col_E = 2300008 
Col_F = 10S 
Col_G = Lock.csv 

Si je pouvais tronquer le. csv off de Col_G, ce serait bien aussi, bien que ce ne soit pas nécessaire. Voici le code que j'ai jusqu'à présent où Col_B et Col_C des dates et heures ne sont pas correctement analysés:

DECLARE @RowCount INT, @I INT 
SET @RowCount = (SELECT COUNT(FileName) FROM Files) 
SET @I = 1 

WHILE (@I <= @RowCount) 
BEGIN 
     DECLARE @FileName VARCHAR(1000) 
     SELECT @FileName = FileName FROM Files WHERE FileID = @I 
     UPDATE Files 
     SET Col_A = dbo.fnSplit(@FileName, '_', 1), 
      Col_B = dbo.fnSplit(@FileName, '_', 2), 
      Col_C = dbo.fnSplit(@FileName, '_', 3), 
      Col_D = dbo.fnSplit(@FileName, '_', 4), 
      Col_E = dbo.fnSplit(@FileName, '_', 5) 
      --etc.etc. 
     WHERE FileID = @I 
     SET @I = @I + 1 
END 

Comment puis-je modifier les instructions SET afin de « sauter » le délimiteur parfois (et de l'inclure dans la nouvelle colonnes) et d'utiliser le délimiteur de soulignement pour diviser les colonnes à d'autres moments?

J'espère que c'est clair. Merci d'avance!

Répondre

1

À moins de manquer quelque chose d'évident, ne pouvez-vous pas concaténer les éléments que vous voulez dans les nouveaux champs?

Dans l'exemple ci-dessous, j'ai retiré la boucle, car il ne semble pas être nécessaire - cependant, je ne peux pas dire que sans quelques détails de votre procédure fnSplit:

UPDATE Files 
SET Col_A = dbo.fnSplit(FileName, '_', 1), 
    Col_B = dbo.fnSplit(FileName, '_', 2) 
     + '_' + dbo.fnSplit(FileName, '_', 3) 
     + '_' + dbo.fnSplit(FileName, '_', 4), 
    Col_C = dbo.fnSplit(FileName, '_', 5), 
    Col_D = dbo.fnSplit(FileName, '_', 6), 
    Col_E = dbo.fnSplit(FileName, '_', 7) 
etc 

(De un point de vue d'utilisabilité, il vaudrait peut-être mieux utiliser des noms plus significatifs pour vos colonnes)

+0

Maintenant, pourquoi n'y ai-je pas pensé plus tôt? Merci Ed, c'est exactement ce que je veux! Je suppose que je pensais trop compliqué. De plus, j'utiliserai des noms différents, je suppose que je ne faisais que poster un exemple de code juste pour être clair sur ce dont je parlais. Merci! –

Questions connexes