Pergunta

Qual é a sintaxe SQL correta para inserir um valor com um apóstrofo nele?

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

Eu continuo recebendo um erro, pois acho que o apóstrofo após o O é a etiqueta final do valor.

Foi útil?

Solução

Escape o apóstrofo (ou seja, dupla o caractere de citação única) em seu SQL:

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

O mesmo se aplica para selecionar consultas:

SELECT First, Last FROM Person WHERE Last = 'O''Brien'

O apóstrofo, ou citação única, é um caractere especial no SQL que especifica o início e o final dos dados da string. Isso significa que para usá -lo como parte dos seus dados literais de string que você precisa para escape o personagem especial. Com uma única citação, isso geralmente é realizado dobrando sua cotação. (Dois caracteres de cotação única, não dupla-quadra em vez de uma única cotação.)

Observação: Você só deve se preocupar com esse problema quando editar manualmente os dados por meio de uma interface SQL bruta, pois escrever consultas fora do desenvolvimento e teste deve ser uma ocorrência rara. No código, existem técnicas e estruturas (dependendo da sua pilha) que cuidam de escapar de caracteres especiais, injeção SQL, etc.

Outras dicas

Você só tem que dobrar as citações únicas ...

insert into Person (First, Last)
values ('Joe', 'O''Brien')

Você precisa escapar do apóstrofo. Dentro T-SQL isso é com um apóstrofo duplo, então seu insert A declaração se torna:

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

Porque uma única cotação é usada para indicar o início e o final de uma string; Você precisa escapar disso.

A resposta curta é usar duas citações únicas - '' - para que um banco de dados SQL armazene o valor como '.

Veja o uso de substituir para higienizar os valores de entrada:

Você quer verificar '''', e substitua -os se existirem na string com '''''' Para escapar da única cotação única.

Eduffy teve uma boa ideia. Ele acabou de pegar para trás em seu exemplo de código. No JavaScript ou no SQLite, você pode substituir o apóstrofo pelo símbolo de sotaque.

Ele (acidentalmente tenho certeza) colocou o símbolo de sotaque como delimitador da corda em vez de substituir o apóstrofo em O'Brian. Esta é de fato uma solução terrivelmente simples para a maioria dos casos.

O personagem apóstrofo pode ser inserido chamando o CARACTERES função com o apóstrofo Pesquisa de tabela ASCII valor, 39. os valores da string podem ser concatenados juntamente com um operador concatenado.

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

Citações únicas são escapadas dobrando -as,

O seguinte SQL ilustra essa funcionalidade.

declare @person TABLE (
    [First] nvarchar(200),
    [Last] nvarchar(200)
)

insert into @person 
    (First, Last)
values
    ('Joe', 'O''Brien')

select * from @person

Resultados

First   | Last
===================
Joe     | O'Brien

Use aspas dupla em torno dos valores.

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

Use um backstick (na ~ ~ Key);

`O'Brien`
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top