web-dev-qa-db-ja.com

アポストロフィを含むアクセス中のテキストを照会するSQL

私はそれを正しくすることができないようですので、これで私を助けてください

私はアクセスデータベースの列名tblStudentsの名前(Daniel O'Neal)を照会しようとしていますが、アクセスはステートメントで構文エラーを報告します:

Select * from tblStudents where name like 'Daniel O'Neal'

名前のアポストロフィのため。

どうすればこれを克服できますか。

前もって感謝します

25
Kevin

エスケープ'倍にすることで、

Select * from tblStudents where name like 'Daniel O''Neal' 

ユーザー入力から "Daniel O'Neal"を受け入れている場合、壊れた引用は重大なセキュリティ問題であることに注意してください。常に文字列をサニタイズするか、パラメータ化されたクエリを使用する必要があります。

58
Alex K.

クエリに文字列リテラルを含める場合、文字列を一重引用符または二重引用符で囲むことができます。 Accessのデータベースエンジンはどちらも受け入れます。したがって、二重引用符は、単一引用符を含む文字列の問題を回避します。

SELECT * FROM tblStudents WHERE [name] Like "Daniel O'Neal";

文字列を一重引用符で囲む場合は、他の回答で説明されているように、その中の単一引用符を2重にすることができます。

SELECT * FROM tblStudents WHERE [name] Like 'Daniel O''Neal';

nameを囲む角括弧に注意してください。 name予約語 であるため、ブラケットを使用してデータベースエンジンを混乱させる可能性を減らしました。

クエリでLike比較を使用している理由は明らかではありません。あなたが示したことに基づいて、これは代わりに動作するはずです。

SELECT * FROM tblStudents WHERE [name] = "Daniel O'Neal";
2
HansUp

O'Neal(2つのアポストロフィ)を記述して、O''Nealのアポストロフィをエスケープします。

1
murgatroid99

もっと簡単な方法:[name] = replace(YourName、 "'"、 "' '")のtblStudentsから*を選択します。

0
user9198383

...名前を変数として宣言し、文字列にアポストロフィがあるかどうかを前に尋ねる方が良いです:

例えば。:

DIM YourName文字列

YourName = "ダニエルオニール"

  If InStr(YourName, "'") Then
      SELECT * FROM tblStudents WHERE [name]  Like """ Your Name """ ;
   else
      SELECT * FROM tblStudents WHERE [name] Like '" Your Name "' ;       
  endif
0
Ralf