SQL查询访问中的文本,其中包含撇号

时间:2011-07-20 15:12:34

标签: sql ms-access

请帮助我,因为我似乎无法做到正确

我正在尝试在访问数据库中的列名tblStudents中查询名称(Daniel O'Neal),但是访问报告语句错误:

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

因为名字中的撇号。

我如何克服这一点。

提前谢谢

5 个答案:

答案 0 :(得分:56)

你通过加倍来逃避 ' ,所以:

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

请注意,如果您从用户输入中接受“Daniel O'Neal”,则报价错误是一个严重的安全问题。您应该始终清理字符串或使用参数化查询。

答案 1 :(得分:2)

在查询中包含字符串文字时,可以将字符串括在单引号或双引号中; Access'数据库引擎也将接受。所以双引号将避免包含单引号的字符串的问题。

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

如果你想在字符串中保留单引号,你可以将其中的单引号加倍,如其他答案所述。

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

请注意 name 周围的方括号。我使用括号来减少混淆数据库引擎的可能性,因为 name reserved word

目前尚不清楚为什么在查询中使用 Like 比较。根据你所展示的内容,这应该可以改变。

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

答案 2 :(得分:1)

通过编写O'Neal(两个撇号)来逃避O''Neal中的撇号。

答案 3 :(得分:0)

...更好的是将名称声明为变量,并在之前询问字符串中是否有撇号:

e.g:

DIM YourName字符串

YourName =“Daniel O'Neal”

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

答案 4 :(得分:0)

如何更简单:从tblStudents中选择*,其中[name] = replace(YourName,"'","''" )