web-dev-qa-db-fra.com

Comment insérer une valeur qui contient une apostrophe (guillemet simple)?

Quelle est la syntaxe SQL correcte pour insérer une valeur avec une apostrophe?

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

Je continue à avoir une erreur car je pense que l'apostrophe après le O est la balise de fin pour la valeur.

255
leora

Échappez à l'apostrophe (c'est-à-dire doublez le caractère guillemet simple) dans votre code SQL: 

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

La même chose s'applique aux requêtes SELECT:

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

L'apostrophe, ou guillemet simple, est un caractère spécial en SQL qui spécifie le début et la fin des données de chaîne. Cela signifie que pour l'utiliser dans vos données de chaîne littérale, vous devez escape le caractère spécial. Avec un seul devis, ceci est généralement accompli en doublant votre devis. (Deux caractères avec guillemets simples, pas de guillemets doubles au lieu d'un guillemet simple.) 

Note: vous ne devriez jamais vous inquiéter de ce problème que lorsque vous modifiez manuellement des données via une interface SQL brute, car l'écriture de requêtes en dehors du développement et des tests devrait être une occurrence rare. Dans le code, il existe des techniques et des frameworks (en fonction de votre pile) qui permettent d'éviter les caractères spéciaux, l'injection SQL , etc.

393
Paul Sasik

Il suffit de doubler les guillemets simples ...

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

Vous devez échapper à l'apostrophe. Dans T-SQL , il s’agit d’une apostrophe double. Votre instruction insert devient:

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

Parce qu'un seul guillemet est utilisé pour indiquer le début et la fin d'une chaîne; vous devez y échapper.

La réponse courte consiste à utiliser deux guillemets simples - '' - pour qu'une base de données SQL stocke la valeur en tant que '.

Examinez l'utilisation de REPLACE pour éliminer les valeurs entrantes:

Vous voulez vérifier '''' et les remplacer s'ils existent dans la chaîne par '''''' afin d'échapper à la citation unique.

13
OMG Ponies

Le caractère apostrophe peut être inséré en appelant la fonction CHAR avec la consultation de la table ASCII) de l'apostrophe valeur, 39. Les valeurs de chaîne peuvent ensuite être concaténées avec un concaténer l'opérateur .

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

eduffy a eu une bonne idée . Il vient de l'obtenir à l'envers dans son exemple de code. En JavaScript ou en SQLite, vous pouvez remplacer l’apostrophe par le symbole d’accent.

Il a (accidentellement, j'en suis sûr) placé le symbole de l'accent comme délimiteur de la chaîne au lieu de remplacer l'apostrophe dans O'Brian. C'est en fait une solution terriblement simple pour la plupart des cas.

3
Robert Sherman

utilisez des guillemets doubles autour des valeurs.

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

Les guillemets simples sont évités en les doublant

Le code SQL suivant illustre cette fonctionnalité.

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

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

select * from @person

Résultats

First   | Last
===================
Joe     | O'Brien
0
Max Pringle