Как вставить значение, содержащее апостроф (одинарную кавычку)? - PullRequest
271 голосов
/ 16 декабря 2009

Каков правильный синтаксис SQL для вставки значения с апострофом?

Insert into Person
  (First, Last)
Values
  'Joe',
  'O'Brien'

Я продолжаю получать сообщение об ошибке, поскольку считаю апостроф после O конечным тегом для значения.

Ответы [ 9 ]

418 голосов
/ 16 декабря 2009

Избегайте апострофа (то есть удваивайте символ одинарной кавычки) в вашем SQL:

INSERT INTO Person
    (First, Last)
VALUES
    ('Joe', 'O''Brien')
              /\
          right here  

То же самое относится к запросам SELECT:

SELECT First, Last FROM Person WHERE Last = 'O''Brien'
<ч />

Апостроф или одинарная кавычка - это специальный символ в SQL, который определяет начало и конец строковых данных. Это означает, что для использования его в качестве части ваших строковых данных вам необходимо escape специальный символ. С помощью одной цитаты это обычно достигается путем удвоения вашей цитаты. (Два символа одинарных кавычек, а не двойные кавычки вместо одинарных.)

Примечание : вам следует беспокоиться об этой проблеме только при ручном редактировании данных через интерфейс необработанного SQL, поскольку написание запросов вне разработки и тестирования должно быть редким явлением. В коде есть методы и структуры (в зависимости от вашего стека), которые заботятся о экранировании специальных символов, SQL-инъекция и т. Д.

31 голосов
/ 16 декабря 2009

Вы просто должны удвоить одинарные кавычки ...

insert into Person (First, Last)
values ('Joe', 'O''Brien')
18 голосов
/ 16 декабря 2009

Вам нужно убежать от апострофа. В T-SQL это с двойным апострофом, поэтому ваше утверждение insert становится:

Insert into Person
(First, Last)
Values
'Joe', 'O''Brien'
14 голосов
/ 16 декабря 2009

Поскольку одинарная кавычка используется для указания начала и конца строки; вам нужно сбежать от него.

Краткий ответ - использовать две одинарные кавычки - '' - чтобы база данных SQL сохраняла значение как '.

Посмотрите, как использовать REPLACE для очистки входящих значений:

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

3 голосов
/ 12 июля 2016

Символ апострофа можно вставить, вызвав функцию CHAR со значением ASCII поиска таблицы апострофом , 39. Затем строковые значения можно объединить вместе с конкатенацией оператор .

Insert into Person
  (First, Last)
Values
  'Joe',
  concat('O',char(39),'Brien')
3 голосов
/ 04 марта 2015

У Эдуффи была хорошая идея . Он просто получил это задом наперед в своем примере кода. В JavaScript или SQLite апостроф можно заменить символом акцента.

Он (случайно я уверен) поместил символ акцента в качестве разделителя для строки вместо замены апострофа в О'Брайане. На самом деле это чрезвычайно простое решение для большинства случаев.

1 голос
/ 24 апреля 2018

Одиночные кавычки экранируются путем удвоения их ,

Следующий 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
0 голосов
/ 30 мая 2017

используйте двойные кавычки вокруг значений.

insert into Person (First, Last) Values("Joe","O'Brien")
0 голосов
/ 16 декабря 2009

Вместо этого используйте обратную черту (на клавише ~);

`O'Brien`
...