2011-06-22 19 views
0

私はいくつかの異常な文字でテーブルにいくつかの行があります。私はその文字のASCII()またはUnicode()を使用すると、それは63を返します。しかし、私はしようとすると、これは -SQLクエリでChar(63)を置き換えることができません

update MyTable 
set MyColumn = replace(MyColumn,char(63),'') 

それは代わるものではありません。置換機能の後に、異常な文字が残っています。 Char(63)は偶然疑問符のように見えます。例えば

は私の文字列は、#それは私の珍しいキャラクターと

select unicode('#') 

私を返す63.Butこのコード

declare @str nvarchar(10) = 'ddd#dd ddd' 
set @char = char(unicode('#')) 
set @str = replace(@str,@char,'') 

取り組んでいるのです '#ddとのDDDをdddを' されます!

これを解決する方法はありますか?

答えて

2

char(63)は '?'のように見えるだけでなく、実際に '?'です。

(簡単なテストでは、数字キーを押しながらAltキーを押しながら数字パッドに「63」を入力してください。このように楽しいことがありますか?alt-205、alt-206再びalt-205:= 012 =)

可能性があります '?'あなたはchar(63)ではないことを見ていますが、SQL Serverが表示方法を知らない文字をより多く示しています。

は、あなたが実行したときに何を得るのです:[yourstring]はあなたの文字列と[pos]ある

select ascii(substring('[yourstring]',[pos],1)); 
--or 
select unicode(substring('[yourstring]',[pos],1)); 

は、文字列コメントから

EDIT

であなたのcharの位置であることそれは疑問符のように思える。あなたは試してみました:関心のうち

replace(MyColumn,'?','') 

EDIT2

を、次はあなたのために何をするのか:

replace(replace(MyColumn,char(146),''),char(63),'') 
+0

をascii - 63、ユニコードby - 146 – Max

+0

146 - タイプnvarcharを使用する場合は、タイプiの場合は63 s varchar – Max

+0

編集を参照してください。これは役に立ちますか? –

2

char(63)です。これらの「異常な」文字はと表示され、疑問符としてと表示されますが、実際には文字コード63の文字ではありません。

この場合、char(63)(別名'?')の削除は、これらの「異常な」文字には影響しません。

-1

これは、同様に動作するはずです:によって

UPDATE TABLE 
    SET [FieldName] = SUBSTRING([FieldName], 2, LEN([FieldName])) 
    WHERE ASCII([FieldName]) = 63 
+3

ようこそスタックオーバーフロー!あなたはいくつかの文脈を提供し、それがどのように質問に答えるかを説明するためにあなたのソリューションを拡張してください。 –