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

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

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

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

235
demandé sur Peter Mortensen 2009-12-16 06:34:44

9 réponses

Échapper l'apostrophe (soit le double de l'apostrophe) dans votre SQL:

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

la même chose s'applique à la sélection des requêtes:

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

l'apostrophe, ou simple citation, 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 comme partie de vos données de chaîne littérale vous avez besoin de escape le caractère spécial. Avec une seule citation c'est typiquement accompli en doublant votre soumission. (Deux guillemets simples, pas deux guillemets au lieu d'un seul.)

Note : vous ne devriez jamais vous soucier de ce problème lorsque vous éditez manuellement des données via une interface SQL brute, car écrire des requêtes en dehors du développement et des tests devrait être un événement rare. Dans le code il y a des techniques et des cadres (selon votre pile) qui prennent soin d'échapper aux caractères spéciaux, Injection SQL , etc.

359
répondu Paul Sasik 2016-01-25 16:31:17

il suffit de doubler les guillemets simples...

insert into Person (First, Last)
values ('Joe', 'O''Brien')
28
répondu Justin Niessner 2009-12-16 03:36:55

vous devez échapper à l'apostrophe. Dans T-SQL c'est avec une double apostrophe, donc votre insert déclaration devient:

Insert into Person
(First, Last)
Values
'Joe', 'O''Brien'
16
répondu David Hall 2016-01-25 16:31:57

parce qu'une seule citation est utilisée pour indiquer le début et la fin d'une chaîne; vous devez l'échapper.

La réponse courte est d'utiliser deux apostrophes '' - pour une base de données SQL pour stocker la valeur ' .

examiner L'utilisation de REPLACE to sanitize incoming values:

vous voulez vérifier pour '''' , et les remplacer s'ils existent dans la chaîne de caractères avec '''''' afin d'échapper à la citation unique.

12
répondu OMG Ponies 2016-01-25 16:32:56

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

il (accidentellement je suis sûr) a placé le symbole d'accent comme le 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.

1
répondu Robert Sherman 2017-05-23 11:47:28

le caractère apostrophe peut être inséré en appelant la fonction CHAR avec la valeur ASCII table lookup , 39. Les valeurs de la chaîne peuvent alors être concaténées avec un opérateur de concaténation .

Insert into Person
  (First, Last)
Values
  'Joe',
  concat('O',char(39),'Brien')
1
répondu Nathan 2016-07-12 11:57:57

utiliser des guillemets autour des valeurs.

insert into Person (First, Last) Values("Joe","O'Brien")
1
répondu run_time_error 2017-05-30 07:07:33

les citations simples sont échappées en les doublant ,

le 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
répondu Max Pringle 2018-04-24 17:25:48

utiliser un backtick (sur la touche~) à la place;

`O'Brien`
-2
répondu eduffy 2009-12-16 03:35:47