アポストロフィを含む値を挿入するための正しいSQL構文は何ですか?
Insert into Person
(First, Last)
Values
'Joe',
'O'Brien'
Oの後のアポストロフィが値の終了タグだと思うので、エラーを出し続けます。
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インジェクション などの世話をするテクニックやフレームワーク(スタックによって異なります)があります。
一重引用符を2倍にするだけです。
insert into Person (First, Last)
values ('Joe', 'O''Brien')
あなたはアポストロフィをエスケープする必要があります。 T-SQL の場合、これは二重アポストロフィであるため、insert
ステートメントは次のようになります。
Insert into Person
(First, Last)
Values
'Joe', 'O''Brien'
一重引用符は文字列の開始と終了を示すために使用されるためです。あなたはそれを脱出する必要があります。
簡単な答えは、SQLデータベースが値を''
として格納するために、2つの単一引用符 - '
- を使用することです。
REPLACEを使用して着信値をサニタイズする方法を見てください。
あなたは''''
をチェックし、それらが単独のシングルクォーテーションをエスケープするために文字列に存在する場合それらを''''''
で置き換えたいと思います。
アポストロフィ文字は、 _ char _ 関数をアポストロフィの ASCII table lookup value、39を使用して呼び出すことで挿入できます。文字列値は、次のように連結できます。 連結演算子 .
Insert into Person
(First, Last)
Values
'Joe',
concat('O',char(39),'Brien')
eduffyは良い考えを持っていた 。彼はコード例でそれを逆にしたばかりです。 JavaScriptでもSQLiteでも、アポストロフィをアクセント記号に置き換えることができます。
彼は(偶然にも私は確信しているが)アクセント記号を文字列の区切り文字として使ったが、オブライアンではアポストロフィを置き換えなかった。これは実際のところほとんどの場合非常に単純な解決策です。
二重引用符はそれらを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
値を二重引用符で囲みます。
insert into Person (First, Last) Values("Joe","O'Brien")