2010-10-19 6 views
1

J'ai colonne avec des valeurs qui ont un mauvais caractère ?. Maintenant, je veux le changer en caractère b. Pour cela, je me sers de cette déclaration:Remplacer ne fonctionne pas!

SELECT REPLACE(name,'?','b') from contacts; 

Mais quand je fais cela ne se passe rien, il retourne la valeur avec ?.

Qu'est-ce que je fais mal? Comment je peux remplacer cela?

+5

Soyons clairs: avez-vous envie resultset d'avoir la modification, ou avez-vous désirerez que les données de la table dans la colonne 'name' être remplacé de façon permanente avec le' 'un caractère' B'? –

+2

Etes-vous sûr que le caractère '?' Existe réellement dans les données? En mode SSMS (paramètres par défaut) "Results to Grid", je trouve parfois qu'il affiche '?' Pour les caractères Unicode qu'il affiche correctement dans le mode "Results to Text". –

Répondre

0

Essayez cette

update contacts set name=replace(name, '?', 'b') 
4

-vous en train d'essayer de changement les valeurs de la table? Dans ce cas, vous devrez faire une UPDATE:

UPDATE contacts 
SET name = Replace(name,'?','b') 

Sinon, si vous essayez simplement de récupérer une valeur modifiée, votre syntaxe devrait fonctionner très bien. (Je l'ai testé, ? n'a pas à être échappé ou quoi que ce soit):

SELECT name, Replace(name,'?','b') as Fixed 
FROM contacts 
4

Une autre possibilité que je l'ai vu avant est que le personnage ressemble à un vieux régulier marque question ASCII, mais ce n'est pas vraiment. C'est en fait un personnage différent. Je sélectionne le texte et le colle dans le Bloc-notes, puis le copie et le colle dans ma requête.

+0

C'est très probablement ce que c'est. J'ai vu quelque chose de similaire à cela dans Oracle. – scarpacci

1

Si votre type de données de colonne est NVARCHAR, vous devez utiliser le préfixe N. NVARCHAR et VARCHAR types ont différance unicode. Consultez le lien this pour plus d'informations sur la différance entre les types NVARCHAR et VARCHAR.

SELECT REPLACE(name,N'?', N'b') from contacts;