Domanda

Qual è la sintassi SQL corretta per inserire un valore con un apostrofo?

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

Continuo a ricevere un errore poiché penso che l'apostrofo dopo l'O sia il tag finale per il valore.

È stato utile?

Soluzione

Escape the Apostrophe (cioè doppiamente il personaggio di singolo preventivo) nel tuo SQL:

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

Lo stesso vale per selezionare le query:

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

L'apostrofo, o citazione singola, è un carattere speciale in SQL che specifica l'inizio e la fine dei dati delle stringhe. Ciò significa che per usarlo come parte dei tuoi dati di stringa letterale necessaria escape il personaggio speciale. Con una singola citazione questo è in genere realizzato raddoppiando la tua citazione. (Due caratteri a preventivo singolo, non doppio quota invece di una singola citazione.)

Nota: Dovresti mai preoccuparti di questo problema solo quando si modificano manualmente i dati tramite un'interfaccia SQL grezzo poiché la scrittura di query al di fuori dello sviluppo e dei test dovrebbe essere un evento raro. Nel codice ci sono tecniche e framework (a seconda dello stack) che si occupano di sfuggire ai personaggi speciali, SQL Injection, eccetera.

Altri suggerimenti

Devi solo raddoppiare le citazioni singole ...

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

Devi sfuggire all'apostrofo. In T-SQL Questo è con un doppio apostrofo, quindi il tuo insert la dichiarazione diventa:

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

Perché un singolo preventivo viene utilizzato per indicare l'inizio e la fine di una stringa; Devi sfuggirlo.

La risposta breve è usare due singoli citazioni - '' - Affinché un database SQL possa archiviare il valore come '.

Guarda l'utilizzo di sostituti per disinfettare i valori in arrivo:

Vuoi verificare '''', e sostituirli se esistono nella stringa con '''''' Per sfuggire alla singola citazione solitaria.

Eduffy aveva una buona idea. L'ha appena ottenuto all'indietro nel suo esempio di codice. In JavaScript o in SQLite è possibile sostituire l'apostrofo con il simbolo di accento.

Lui (accidentalmente sono sicuro) ha posto il simbolo dell'accento come delimitatore per la stringa invece di sostituire l'apostrofo in O'Brian. Questa è in realtà una soluzione terribilmente semplice per la maggior parte dei casi.

Il carattere apostrofo può essere inserito chiamando il CHAR funzione con l'apostrofo Lookup al tavolo ASCII valore, 39. I valori della stringa possono quindi essere concatenati insieme a a operatore concatenato.

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

Le citazioni singole vengono sfuggite raddoppiandole,

Il seguente SQL illustra questa funzionalità.

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

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

select * from @person

Risultati

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

Usa i doppi virgolette attorno ai valori.

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

Usa un backtick (sul tasto ~) invece;

`O'Brien`
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top