J'ai une colonne dans la base de données (SQL Server 2005) comportant des données avec un "\ 0" à la fin. Lors de la requête dans SQL Server, ce caractère n'est pas visible et ne semble pas exister. Quand je regarde dans mon code C #, le personnage est là. Ce caractère provoque une erreur sur notre site Web et nous en avons besoin de supprimer de toutes les lignes affectées.
existe une requête SQL que je peux écrire pour supprimer facilement ce caractère de tous les enregistrements affectés? Je peux obtenir tous les enregistrements concernés, mais je n'ai pas le moyen de mettre à jour l'enregistrement à une nouvelle valeur (sans le "\ 0"). P>
mise à jour:
Cela semble fonctionner: p> donc: p>
3 Réponses :
Mettre à jour le jeu TBL Col = Remplacer (Col, Char (0), '')
Strike>
Edit: Juste pour racheter cette réponse! Pourrait être utile pour le cas plus général qu'une chaîne a incorporé puis p> \ 0 code> s. P>
fait ... ... travail? p> SUBSTRING (Naughtyfield, 1, Len (Naughtyfield) - 1) Code> Sur ces champs qui sont des travaux terminés nuls - mais veillez à ne pas l'utiliser sur des chaînes non nuls terminées ou que vous perdrez des données. P> P>
N ° de mon test rapide. Créer une table #T (Col Varchar (50)) Insérez des valeurs #T ('HGJH' + Char (0) + 'GGHG') Mise à jour #T Set Col = Remplacer (Col, Char (0), '' ) code>
Len (Naughtyfield) renvoie-t-il la longueur, y compris le Terminator NULL dans MSSQL?
Oui, len ('la chaîne dans la colonne') = x, len (naughtyfield) = x + 1
Utilisez la sous-chaîne (Naughtyfield, 1, Len (Naughtyfield) - 1) Code> sur ces champs désignés - cela fonctionne.
Je ne suis pas sûr que tous les champs l'auront, je pourrais donc couper de bonnes données
"Je peux obtenir tous les enregistrements concernés" - pouvez-vous?
Eh bien, oui, mais j'aimerais une solution plus propre, une solution qui me donne une meilleure confiance, je ne supprime pas quelque chose que je ne devrais pas être
Quand je mets à Varbinary, je reçois 00 à la fin de la chaîne. Tu n'as pas fait toi?
Jetez un coup d'œil sur @ Stackoverflow.com/Questtions/2828333/... - Il y a quelques idées qui pourraient vous être utiles - des sons comme ceci est une question spécifique de la garantie.
@Will (a) Déplacez votre commentaire de sous-chaîne dans votre réponse afin qu'il puisse l'accepter! (b) J'ai essayé certaines idées de cette question que vous avez liées, mais elles ne semblaient pas fonctionner pour Nvarchar Colonnes Declare @T Table (Col Nvarchar (50)) Insert dans les valeurs @T (n 'n' n '' + Char ( 0) + n '国') Mise à jour @T Set Col = Remplacer (COLLE (COL COLLATE SQL_LATIN1_AGENERAL_CP1_CI_AS AS NvarchaRar (Max)), Char (0), '') Sélectionnez Col, Colbal (Col comme Varbinaire) de @T Code>
Prudent! La fonction Remplacer () ne fonctionnera pas avec les types de données Unicode (Nvarparar, Nchar).
Je suis confronté à ce problème et j'ai réparé récemment. Il semble que ce soit toujours à la fin d'une chaîne (comme il s'agit d'un personnage de terminaison).
De plus, car ce n'est pas un espace blanc, il provoque Rtrim de ne pas fonctionner sur des champs qui ont des espaces de fuite supplémentaires (par exemple 'Californie \ 0' ). P>
Le moyen le plus sûr de supprimer Ceci est de la sous-chaîne de (0) à (le dernier index de '\ 0' ou de la longueur de chaîne si '\ 0' non trouvé) p>
Voici comment je l'ai supprimé en toute sécurité dans mon cas p> et ici le retire et couper les espaces supplémentaires. P> ltrim(rtrim(substring([field], 0, ( LEN([field]) - CHARINDEX(char(0), REVERSE([field])) + 1 ) ) ))
Alors, comment puis-je faire ça? La réponse de Will n'est pas correcte, mais son aide m'a conduit à ma solution.
Si vous allez déplacer son commentaire sur l'utilisation de
Substring (Naughtyfield, 1, Len (Naughtyfield) - 1) Code> dans sa réponse qui devrait résoudre le problème?Ouais ... bien que votre réponse soit plus élégante, je ne pense pas pouvoir créer une fonction sur la base de données Prod pour cette "solution rapide". Trop de papier.