web-dev-qa-db-ja.com

アポストロフィ(一重引用符)を含む値を挿入する方法

アポストロフィを含む値を挿入するための正しいSQL構文は何ですか?

Insert into Person
  (First, Last)
Values
  'Joe',
  'O'Brien'

Oの後のアポストロフィが値の終了タグだと思うので、エラーを出し続けます。

266
leora

SQLでアポストロフィをエスケープする(つまり、一重引用符を二重にする):

INSERT INTO Person
    (First, Last)
VALUES
    ('Joe', 'O''Brien')
              /\
          right here  

SELECTクエリにも同じことが当てはまります。

SELECT First, Last FROM Person WHERE Last = 'O''Brien'

アポストロフィ(一重引用符)は、文字列データの始めと終わりを指定するSQLの特殊文字です。つまり、それをリテラル文字列データの一部として使用するには、特殊文字をescapeにする必要があります。一重引用符では、これは通常あなたの引用符を2倍にすることによって達成されます。 (単一引用符の代わりに二重引用符ではなく、2つの単一引用符文字。)

:生のSQLインタフェースを介して手作業でデータを編集する場合は、開発やテスト以外の場所でクエリを作成することはめったにないため、この問題について心配する必要はありません。コードには、特殊文字のエスケープ、 SQLインジェクション などの世話をするテクニックやフレームワーク(スタックによって異なります)があります。

409
Paul Sasik

一重引用符を2倍にするだけです。

insert into Person (First, Last)
values ('Joe', 'O''Brien')
31
Justin Niessner

あなたはアポストロフィをエスケープする必要があります。 T-SQL の場合、これは二重アポストロフィであるため、insertステートメントは次のようになります。

Insert into Person
(First, Last)
Values
'Joe', 'O''Brien'
18
David Hall

一重引用符は文字列の開始と終了を示すために使用されるためです。あなたはそれを脱出する必要があります。

簡単な答えは、SQLデータベースが値を''として格納するために、2つの単一引用符 - ' - を使用することです。

REPLACEを使用して着信値をサニタイズする方法を見てください。

あなたは''''をチェックし、それらが単独のシングルクォーテーションをエスケープするために文字列に存在する場合それらを''''''で置き換えたいと思います。

14
OMG Ponies

アポストロフィ文字は、 _ char _ 関数をアポストロフィの ASCII table lookup value、39を使用して呼び出すことで挿入できます。文字列値は、次のように連結できます。 連結演算子 .

Insert into Person
  (First, Last)
Values
  'Joe',
  concat('O',char(39),'Brien')
3
Nathan

eduffyは良い考えを持っていた 。彼はコード例でそれを逆にしたばかりです。 JavaScriptでもSQLiteでも、アポストロフィをアクセント記号に置き換えることができます。

彼は(偶然にも私は確信しているが)アクセント記号を文字列の区切り文字として使ったが、オブライアンではアポストロフィを置き換えなかった。これは実際のところほとんどの場合非常に単純な解決策です。

3
Robert Sherman

二重引用符はそれらを2倍にすることによってエスケープされます

次のSQLはこの機能を示しています。

declare @person TABLE (
    [First] nvarchar(200),
    [Last] nvarchar(200)
)

insert into @person 
    (First, Last)
values
    ('Joe', 'O''Brien')

select * from @person

結果

First   | Last
===================
Joe     | O'Brien
1
Max Pringle

値を二重引用符で囲みます。

insert into Person (First, Last) Values("Joe","O'Brien")
1
run_time_error