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

Kev*_*vin 25 sql ms-access

请帮助我,因为我似乎无法做到这一点

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

Select * from tblStudents where name like 'Daniel O'Neal'
Run Code Online (Sandbox Code Playgroud)

因为名字中的撇号.

我该如何克服这一点.

先感谢您

Ale*_* K. 60

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

Select * from tblStudents where name like 'Daniel O''Neal' 
Run Code Online (Sandbox Code Playgroud)

请注意,如果您从用户输入接受"Daniel O'Neal",那么破坏的报价是一个严重的安全问题.您应该始终清理字符串或使用参数化查询.

  • @RichardSpencer 在某些情况下,如果您传递包含未转义的 `'` 字符的字符串变量,然后使用它们来构造您对 *SQL 注入攻击*开放的 SQL 语句;http://en.wikipedia.org/wiki/SQL_injection (2认同)

Han*_*sUp 5

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

SELECT * FROM tblStudents WHERE [name] Like "Daniel O'Neal";
Run Code Online (Sandbox Code Playgroud)

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

SELECT * FROM tblStudents WHERE [name] Like 'Daniel O''Neal';
Run Code Online (Sandbox Code Playgroud)

注意name周围的方括号。我使用括号来减少混淆数据库引擎的机会,因为name是一个保留字。

不清楚您为什么在查询中使用Like比较。根据您所展示的内容,这应该起作用。

SELECT * FROM tblStudents WHERE [name] = "Daniel O'Neal";
Run Code Online (Sandbox Code Playgroud)