Je voudrais remplacer (ou supprimer) un caractère de nouvelle ligne dans une chaîne TSQL. Des idées?
L'évident
REPLACE(@string, CHAR(13), '')
ne le fera tout simplement pas ...
En fait, une nouvelle ligne dans une chaîne de commande ou de script SQL peut être n'importe laquelle de CR, LF ou CR + LF. Pour les obtenir tous, vous avez besoin de quelque chose comme ceci:
SELECT REPLACE(REPLACE(@str, CHAR(13), ''), CHAR(10), '')
.columns[0]
place.la source
J'ai peut-être un an de retard pour la fête, mais je travaille tous les jours sur les requêtes et MS-SQL, et je me suis fatigué des fonctions intégrées LTRIM () & RTRIM () (et toujours avoir à les appeler ensemble), et de ne pas attraper les données «sales» qui avaient des nouvelles lignes à la fin, j'ai donc décidé qu'il était grand temps de mettre en œuvre une meilleure fonction TRIM. J'accueillerais les commentaires des pairs!
Avertissement : cela supprime en fait (remplace par un seul espace blanc) les formes étendues d'espaces blancs (tabulation, saut de ligne, retour chariot, etc.), il a donc été renommé "CleanAndTrim" de ma réponse d'origine. L'idée ici est que votre chaîne n'a pas besoin de ces caractères d'espaces spéciaux supplémentaires à l'intérieur, et donc s'ils ne se produisent pas en tête / queue, ils doivent être remplacés par un espace simple. Si vous avez délibérément stocké de tels caractères dans votre chaîne (par exemple, votre colonne de données sur laquelle vous êtes sur le point de l'exécuter), NE LE FAITES PAS! Améliorez cette fonction ou écrivez la vôtre qui supprime littéralement ces caractères des points de terminaison de la chaîne, pas du «corps».
Bon, maintenant que l'avertissement est mis à jour, voici le code.
À votre santé!
Un autre avertissement : votre saut de ligne Windows typique est CR + LF, donc si votre chaîne en contient, vous finirez par les remplacer par des espaces "doubles".
MISE À JOUR, 2016 : Une nouvelle version qui vous donne la possibilité de remplacer ces caractères d'espaces spéciaux par d' autres caractères de votre choix! Cela inclut également les commentaires et la solution de contournement pour l'appariement Windows CR + LF, c'est-à-dire remplace cette paire de caractères spécifique par une seule substitution.
la source
Le Newline dans T-SQL est représenté par CHAR (13) & CHAR (10) (retour chariot + saut de ligne). Par conséquent, vous pouvez créer une instruction REPLACE avec le texte avec lequel vous souhaitez remplacer la nouvelle ligne.
la source
Pour faire ce que la plupart des gens voudraient, créez un espace réservé qui n'est pas un véritable caractère de saut de ligne. Ensuite, vous pouvez réellement combiner les approches pour:
De cette façon, vous ne remplacez qu'une seule fois. L'approche de:
Fonctionne très bien si vous voulez simplement vous débarrasser des caractères CRLF, mais si vous voulez un espace réservé, comme
ou quelque chose, la première approche est un peu plus précise.
la source
Si le type de données de votre colonne est « texte », vous obtiendrez un message d'erreur
Dans ce cas, vous devez convertir le texte en nvarchar, puis remplacer
la source
Si vous avez un problème où vous souhaitez uniquement supprimer les caractères de fin , vous pouvez essayer ceci:
Cela a résolu un problème que j'avais avec les adresses où une procédure créait un champ avec un nombre fixe de lignes, même si ces lignes étaient vides. Pour économiser de l'espace dans mon rapport SSRS, je les ai coupés.
la source
Si vous avez une procédure ouverte avec l'utilisation de sp_helptext, copiez simplement tout le texte dans la nouvelle requête sql et appuyez sur le bouton ctrl + h. Utilisez l'expression régulière pour remplacer et mettez ^ \ n dans le champ de recherche remplacer par vide. pour plus de détails, vérifiez l'image. entrez la description de l'image ici
la source
Vers la solution @Cerebrus: pour H2 pour les chaînes "+" n'est pas pris en charge. Donc:
la source
La réponse affichée ci-dessus / plus tôt qui a été signalée pour remplacer CHAR (13) CHAR (10) retour chariot:
N'atteindra jamais la
REPLACE(MyField, CHAR(13) + CHAR(10), 'something else')
partie du code et renverra le résultat indésirable de:Et PAS le résultat souhaité d'un seul:
Cela nécessiterait que le script REPLACE soit réécrit en tant que tel:
Comme le flux teste d'abord l'instruction REPLACE 1ère / la plus à gauche, puis en cas d'échec continuera de tester l'instruction REPLACE suivante.
la source