SQL для запроса текста в доступе с апострофом в нем - PullRequest
24 голосов
/ 20 июля 2011

Пожалуйста, помогите мне с этим, потому что я, кажется, не могу понять это правильно

Я пытаюсь запросить имя (Даниэль О'Нил) в именах столбцов tblStudents в базе данных доступа, однако доступ сообщает об ошибке синтаксиса сутверждение:

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

из-за апострофа в имени.

Как мне преодолеть это.

Заранее спасибо

Ответы [ 5 ]

56 голосов
/ 20 июля 2011

Вы удваиваете ', удваивая его, так что:

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

Обратите внимание, что если вы принимаете "Даниэль О'Нил" из пользовательского ввода, ломаная кавычкасерьезная проблема безопасности.Вы всегда должны очищать строку или использовать параметризованные запросы.

2 голосов
/ 20 июля 2011

Когда вы включаете строковый литерал в запрос, вы можете заключить строку в одинарные или двойные кавычки; Access 'двигатель базы данных примет либо. Таким образом, двойные кавычки позволят избежать проблемы со строкой, содержащей одинарные кавычки.

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

Если вы хотите сохранить одинарные кавычки вокруг вашей строки, вы можете удвоить одинарную кавычку внутри нее, как упоминалось в других ответах.

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

Обратите внимание на квадратные скобки, окружающие name . Я использовал скобки, чтобы уменьшить вероятность путаницы механизма базы данных, потому что name является зарезервированным словом .

Непонятно, почему вы используете в своем запросе сравнение Like . Исходя из того, что вы показали, это должно работать вместо этого.

SELECT * FROM tblStudents WHERE [name] = "Daniel O'Neal";
1 голос
/ 20 июля 2011

Выйдите из апострофа в O'Neal, написав O''Neal (два апострофа).

0 голосов
/ 10 января 2018

Как насчет более простого: Выберите * из tblStudents, где [name] = replace (YourName, "'", "' '"))

0 голосов
/ 31 декабря 2014

... лучше объявить имя переменным и спросить, есть ли в строке апостроф:

например:

DIM YourName string

YourName ="Даниэль О'Нил"

  If InStr(YourName, "'") Then
      SELECT * FROM tblStudents WHERE [name]  Like """ Your Name """ ;
   else
      SELECT * FROM tblStudents WHERE [name] Like '" Your Name "' ;       
  endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...