2010-11-19 7 views
0

S'il vous plaît aidez-moi avec une requête T-SQL dans SQL 2008 pour obtenir la valeur entre le premier double citation à la deuxième double citation. La chaîne aura plusieurs guillemets doubles. Le XXX sera de longueur variable.T-SQL analyse partie de la chaîne

E.g. il retournera [email protected] Colonne

XXX Usr = zone "[email protected]" = "fyrkkk =" 0" htyy "ukbpfrttt897 =" 009"/

Un grand merci.

Répondre

0

Vous avez besoin d'un combo de CHARINDEX() pour trouver l'emplacement des guillemets et SUBSTRING() pour sélectionner la portion de chaîne que vous voulez, une fois que vous connaissez ces index. Malheureusement, CHARINDEX() donne la première occurence, donc ça va prendre un peu de travail.

SELECT SUBSTRING(column, CHARINDEX('"', column), CHARINDEX('"', SUBSTRING(column, CHARINDEX('"', column), 100))) 

Pour mieux comprendre cela, remplacer CHARINDEX ('"', colonne) avec q1 (index de première citation)

SELECT SUBSTRING(column, q1, CHARINDEX('"', SUBSTRING(column, q1, 100))) 

Prenez substring de la colonne de q1 à (indice de la première occurence de" dans tout après q1). 100 peut être un nombre entier plus long que la longueur maximale de cet e-mail, j'ai voulu s'assurer que la deuxième citation est incluse et il n'y a pas de problème de dépassement. Jouez avec cela, il pourrait y avoir un arrêt par une erreur

SUBSTRING (mot, début, longueur) http://msdn.microsoft.com/en-us/library/ms187748.aspx CHARINDEX (mot, char)

1

Utilisez CHARINDEX pour trouver les guillemets doubles et SUBSTRING pour obtenir le string out

1

Cela ressemble à une syntaxe XML incorrecte pour moi.

DECLARE @XMLData XML = N'<Node Usr="[email protected]" zone="" fyrkkk="0" htyy="" ukbpfrttt897="009" />' 

SELECT tab.col.value('@Usr','NVARCHAR(128)') AS UserMail 
    FROM @XMLData.nodes('/Node[1]') AS tab(col)