Frage

Was ist die korrekte SQL -Syntax, um einen Wert mit einem Apostrophe darin einzufügen?

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

Ich erhalte immer wieder einen Fehler, da ich denke, dass der Apostroph nach dem O das Ende des Wertes ist.

War es hilfreich?

Lösung

Entkommen dem Apostroph (dh Double-up das einzelne Zitatcharakter) in Ihrem SQL:

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

Gleiches gilt für die Auswahl von Abfragen:

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

Das Apostroph oder ein einzelnes Zitat ist ein spezielles Zeichen in SQL, das den Beginn und Ende der String -Daten angibt. Dies bedeutet, dass Sie als Teil Ihrer wörtlichen Zeichenfolgedaten verwendet werden müssen, die Sie benötigen escape der besondere Charakter. Mit einem einzigen Zitat wird dies normalerweise durch Verdoppelung Ihres Angebots erreicht. (Zwei einzelne Zitatzeichen, keine doppelte Zitat anstelle eines einzelnen Zitats.)

Notiz: Sie sollten sich immer nur um dieses Problem kümmern, wenn Sie Daten über eine RAW -SQL -Schnittstelle manuell bearbeiten, da das Schreiben von Abfragen außerhalb der Entwicklung und des Tests ein seltenes Ereignis sein sollte. In Code gibt es Techniken und Frameworks (abhängig von Ihrem Stapel), die sich darum kümmern, Sonderzeichen zu entkommen. SQL-Injektion, etc.

Andere Tipps

Sie müssen sich nur für die einzelnen Zitate verdoppeln ...

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

Sie müssen dem Apostroph entkommen. Im T-SQL Dies ist mit einem doppelten Apostroph, also Ihre insert Aussage wird:

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

Weil ein einzelnes Zitat verwendet wird, um den Start und das Ende einer Zeichenfolge anzuzeigen; Sie müssen ihm entkommen.

Die kurze Antwort besteht darin, zwei einzelne Zitate zu verwenden - '' - Damit eine SQL -Datenbank den Wert als Speicher speichert '.

Sehen Sie sich die Verwendung von Ersatz an, um eingehende Werte zu sanieren:

Sie möchten nachsehen '''', und ersetzen Sie sie, wenn sie in der Zeichenfolge mit existieren '''''' Um dem einzigen einzelnen Zitat zu entkommen.

Eduffy hatte eine gute Idee. Er hat es gerade in seinem Code -Beispiel rückwärts bekommen. Entweder in JavaScript oder in SQLite können Sie den Apostroph durch das Akzentsymbol ersetzen.

Er (versehentlich bin ich mir sicher) hat das Akzentsymbol als Trennzeichen für die Zeichenfolge platziert, anstatt den Apostroph in O'Brian zu ersetzen. Dies ist in den meisten Fällen in der Tat eine sehr einfache Lösung.

Das Apostrophe -Zeichen kann durch Aufrufen des VERKOHLEN Funktion mit dem Apostroph ASCII -Tabelle Lookup Wert, 39. Die Stringwerte können dann zusammen mit a verkettet werden Verkettungsbetreiber.

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

Einzelne Zitate werden entkommen, indem sie verdoppelt werden,

Die folgende SQL veranschaulicht diese Funktionalität.

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

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

select * from @person

Ergebnisse

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

Verwenden Sie doppelte Anführungszeichen um die Werte.

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

Verwenden Sie stattdessen einen Backtick (auf der ~ Schlüssel);

`O'Brien`
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top