SQL Serverには、単一引用符を置き換えるためのこの関数があります。
しかし、単一引用符を挿入すると、Replace(@strip,''',''))
でエラーがスローされます。
Create Function [dbo].[fn_stripsingleQuote]
(@strStrip varchar(Max))
returns varchar
as
begin
declare @CleanString varchar(Max)
SET @var=(Replace(@strip,'',''))
return @var
end
次のように、単一引用符を二重にする必要があります。
REPLACE(@strip, '''', '')
REPLACE(@strip,'''','')
を試してください
SQL
は、2つの引用符を使用して文字列内の1つを表します。
本当に一重引用符を完全に削除する必要がある場合は、次の操作を実行できます。
Replace(@strip, '''', '')
ただし、通常は 'を' 'に置き換えます。これにより、データベースを照会するときにSQL Serverが幸せになります。組み込みのSQL関数(置換など)の秘trickは、それらも単一引用符を2重にする必要があることです。
したがって、コードで 'を' 'に置き換えるには、次のようにします。
Replace(@strip, '''', '''''')
もちろん、データベースを照会するときにパラメーターを使用する場合、状況によってはこれを完全に行う必要を回避できます。 .NETアプリケーションからデータベースをクエリしている場合、 SqlParameter class を使用してクエリのSqlCommandパラメータを入力すると、この一重引用符のすべてが自動的に処理されます。これは通常、SQLパラメーターが SQLインジェクション 攻撃の防止にも役立つため、推奨される方法です。
[〜#〜] quotename [〜#〜] 機能を複製しようとしているようです。この組み込み関数を使用して、区切り文字を追加し、文字列内の区切り文字を適切にエスケープして、単一の'
およびdouble "
区切り記号としての引用符、およびブラケット[
および]
。
Char(39)を使用できます
insert into my_table values('hi, my name'+char(39)+'s tim.')
単一引用符で単一引用符をエスケープしてみてください:
Replace(@strip, '''', '')
ここで当てはまる奇妙な異常に遭遇しました。 Google APIを使用し、XML形式で応答を取得すると、単一引用符のためにXMLデータ型に変換できませんでした。
Replace(@Strip、 '' ''、 '')
一重引用符が39ではなくアスキー文字146であったため、機能していませんでした。
Replace(@ Strip、char(146)、 '')
これは、通常の単一引用符char(39)およびその他の特殊文字でも機能します。
ユーザー入力( input sanitation )からの単一引用符のストライピング/置換/エスケープは、実行する必要がありますbefore SQLステートメントはデータベースに到達します。
二重引用符を使用して引用符をエスケープする必要があることに加えて、変数の名前も混同しています:@CleanStringと@strStripの代わりに@varと@stripを使用しています...
私はこれがそのための最短のSQL文だと思う:
CREATE FUNCTION [dbo].[fn_stripsingleQuote] (@strStrip varchar(Max))
RETURNS varchar(Max)
AS
BEGIN
RETURN (Replace(@strStrip ,'''',''))
END
これがお役に立てば幸いです!
単一引用符を別の単一引用符でエスケープしてもうまくいかない場合(最近のREPLACE()クエリの1つではなかったように)、クエリの前にSET QUOTED_IDENTIFIER OFFを使用し、その後SET QUOTED_IDENTIFIER ONを使用できます。
例えば
SET QUOTED_IDENTIFIER OFF;
UPDATE TABLE SET NAME = REPLACE(NAME, "'S", "S");
SET QUOTED_IDENTIFIER OFF;