0

コピー/貼り付けのために一部のコンテンツに挿入されたMicrosoftWordのスマート引用符(および他のWordのスマート文字)を修正しようとしています。これに対する恒久的な解決策に取り組んでいる間、問題が発生したときにデータを修正できるようにスクリプトを作成しようとしています。

それをテストするために、私は次のクエリを実行していますselect title from DigArticleArticle where ArticleId = 8249。これにより、無効な文字による疑問符が付いたタイトルが正しく取得されます。これを置き換えるために、次のクエリを試しました。

select REPLACE(title, CHAR(8216), char(39)), Title from DigArticleArticle where ArticleID = 8249

これにより、最初の列としてnullが返されます。なぜ私の置換はnullを返すのでしょうか?文字コードが見つからない場合でも、元の文字列を返す必要があります。

4

2 に答える 2

3

試す:

select REPLACE(title, NCHAR(8216), char(39)), Title from DigArticleArticle where ArticleID = 8249

上記のように、CHAR()はASCII文字(0〜255)を処理します。この場合、Unicodeバージョンが必要です。NCHAR()は0〜65535の範囲を処理できます。

于 2012-06-21T20:28:47.483 に答える
1

charの引数に関するMSDNドキュメントから

CHAR(integer_expression)

引数

integer_expression

0から255までの整数です。整数式がこの範囲にない場合はNULLが返されます。

8216は255より大きいため、null

交換用

返品タイプ

入力引数の1つがnvarcharデータ型の場合、nvarcharを返します。それ以外の場合、REPLACEはvarcharを返します。

引数のいずれかがNULLの場合、NULLを返します。

char(8216)したがって、が置換の引数である場合は、常にnullが返されます

trekstuffの回答によると、代わりにncharを使用する必要があります

于 2012-06-21T20:23:39.300 に答える