web-dev-qa-db-ja.com

SQL Serverの単一引用符を置き換える

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
43
acadia

次のように、単一引用符を二重にする必要があります。

REPLACE(@strip, '''', '')
96
David Andres

REPLACE(@strip,'''','')を試してください

SQLは、2つの引用符を使用して文字列内の1つを表します。

25
ScottLenart

本当に一重引用符を完全に削除する必要がある場合は、次の操作を実行できます。

Replace(@strip, '''', '')

ただし、通常は 'を' 'に置き換えます。これにより、データベースを照会するときにSQL Serverが幸せになります。組み込みのSQL関数(置換など)の秘trickは、それらも単一引用符を2重にする必要があることです。

したがって、コードで 'を' 'に置き換えるには、次のようにします。

Replace(@strip, '''', '''''')

もちろん、データベースを照会するときにパラメーターを使用する場合、状況によってはこれを完全に行う必要を回避できます。 .NETアプリケーションからデータベースをクエリしている場合、 SqlParameter class を使用してクエリのSqlCommandパラメータを入力すると、この一重引用符のすべてが自動的に処理されます。これは通常、SQLパラメーターが SQLインジェクション 攻撃の防止にも役立つため、推奨される方法です。

17
Steve Wortham

[〜#〜] quotename [〜#〜] 機能を複製しようとしているようです。この組み込み関数を使用して、区切り文字を追加し、文字列内の区切り文字を適切にエスケープして、単一の'およびdouble "区切り記号としての引用符、およびブラケット[および]

4
Remus Rusanu

Char(39)を使用できます

insert into my_table values('hi, my name'+char(39)+'s tim.')
3
NicoJuicy

単一引用符で単一引用符をエスケープしてみてください:

Replace(@strip, '''', '')
2
Yannick Motton

ここで当てはまる奇妙な異常に遭遇しました。 Google APIを使用し、XML形式で応答を取得すると、単一引用符のためにXMLデータ型に変換できませんでした。

Replace(@Strip、 '' ''、 '')

一重引用符が39ではなくアスキー文字146であったため、機能していませんでした。

Replace(@ Strip、char(146)、 '')

これは、通常の単一引用符char(39)およびその他の特殊文字でも機能します。

1
Gus Hixson

ユーザー入力( input sanitation )からの単一引用符のストライピング/置換/エスケープは、実行する必要がありますbefore SQLステートメントはデータベースに到達します。

1
Esteban Küber

二重引用符を使用して引用符をエスケープする必要があることに加えて、変数の名前も混同しています:@CleanStringと@strStripの代わりに@varと@stripを使用しています...

0
AviD

私はこれがそのための最短のSQL文だと思う:

CREATE FUNCTION [dbo].[fn_stripsingleQuote] (@strStrip varchar(Max))
    RETURNS varchar(Max)
AS
BEGIN    
    RETURN (Replace(@strStrip ,'''',''))
END

これがお役に立てば幸いです!

0
jovenb

単一引用符を別の単一引用符でエスケープしてもうまくいかない場合(最近の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;
0
Brad Waite