2010-11-30 5 views
1

J'ai certaines données qui sont stockées dans une colonne VARCHAR(MAX) qui contient les caractères de contrôle CR & LF (CHAR (10) & CHAR (13)).Inclure les retours chariot lors du calcul de la sous-chaîne

J'ai quelques numéros de position de début et de fin que je dois utiliser pour extraire une sous-chaîne du texte - mais lorsque j'utilise SUBSTRING ces caractères de contrôle sont ignorés, ce qui entraîne l'extraction incorrecte de la sous-chaîne.

J'ai écrit une requête en utilisant un CTE qui remplace toutes les instances de CRLF par un autre caractère (¬¬), puis la sous-chaîne fonctionne correctement - mais je dois conserver les CRLF dans le texte.

Quelqu'un peut-il penser à une façon dont je peux obtenir la fonction SUBSTRING pour inclure les caractères de contrôle quand il calcule quelle partie de la chaîne à extraire?

+0

Pouvez-vous nous montrer votre code non fonctionnel qui utilise 'SUBSTRING'? – Gabe

+0

Question muette - avez-vous déjà essayé de les remplacer par des caractères différents? Par exemple, Char 10 w/¬ et Char 13 avec autre chose? Ensuite, vous sauriez comment les inverser. – Matt

+0

Je pense, plus correctement, que les décalages que vous essayez d'utiliser ont été calculés en ignorant CRLF, plutôt que SUBSTRING en mal - d'où viennent vos numéros de décalage et de longueur SUBSTRING, et peuvent-ils être corrigés? –

Répondre

2

La version SQL Server de substring traite CRLF comme les autres caractères. Par exemple:

select substring('123' + char(10) + char(13) + '678',1,3) 
--> 
123 

select substring('123' + char(10) + char(13) + '678',4,2) 
--> 
\r\n 

select substring('123' + char(10) + char(13) + '678',6,3) 
--> 
678 

Vérifiez à nouveau votre code, ou poster un exemple plus précis où substring ne fonctionne pas comme prévu.

Questions connexes