Jaka jest poprawna składnia SQL do wstawiania wartości z apostrofem?
Insert into Person
(First, Last)
Values
'Joe',
'O'Brien'
Ciągle pojawia się błąd, ponieważ myślę, że apostrof po O jest końcowym znacznikiem wartości.
Jaka jest poprawna składnia SQL do wstawiania wartości z apostrofem?
Insert into Person
(First, Last)
Values
'Joe',
'O'Brien'
Ciągle pojawia się błąd, ponieważ myślę, że apostrof po O jest końcowym znacznikiem wartości.
Odpowiedzi:
Unikaj apostrofu (tzn. Podwoj znak pojedynczego cudzysłowu) w swoim SQL:
INSERT INTO Person
(First, Last)
VALUES
('Joe', 'O''Brien')
/\
right here
To samo dotyczy zapytań SELECT:
SELECT First, Last FROM Person WHERE Last = 'O''Brien'
Apostrof lub pojedynczy cudzysłów to znak specjalny w SQL, który określa początek i koniec danych ciągu. Oznacza to, że aby użyć go jako części danych literału, potrzebny jest escape
znak specjalny. W przypadku pojedynczej wyceny zazwyczaj osiąga się to poprzez podwojenie wyceny. (Dwa znaki pojedynczego cudzysłowu, nie podwójne cudzysłowy zamiast pojedynczego cudzysłowu.)
Uwaga : powinieneś martwić się tym problemem tylko podczas ręcznej edycji danych za pomocą surowego interfejsu SQL, ponieważ pisanie zapytań poza programowaniem i testowaniem powinno być rzadkim zjawiskiem. W kodzie są techniki i frameworki (w zależności od stosu), które dbają o unikanie znaków specjalnych, wstrzyknięcie SQL itp.
Musisz tylko podwoić liczbę pojedynczych cytatów ...
insert into Person (First, Last)
values ('Joe', 'O''Brien')
Ponieważ pojedynczy cudzysłów służy do wskazania początku i końca łańcucha; musisz uciec.
Krótka odpowiedź polega na użyciu dwóch pojedynczych cudzysłowów - ''
- aby baza danych SQL zapisała wartość jako '
.
Spójrz na użycie REPLACE do czyszczenia przychodzących wartości:
Chcesz sprawdzić ''''
i zastąpić je, jeśli istnieją w ciągu ''''''
, aby uniknąć pojedynczego cudzysłowu.
eduffy miał dobry pomysł . Właśnie dostał to wstecz w swoim przykładzie kodu. W JavaScript lub SQLite możesz zastąpić apostrof symbolem akcentu.
On (przypadkowo jestem pewien) umieścił symbol akcentu jako ogranicznik łańcucha zamiast zastępować apostrof w O'Brian. W rzeczywistości jest to przerażająco proste rozwiązanie w większości przypadków.
Znak apostrofu można wstawić, wywołując funkcję CHAR z wartością wyszukiwania tablicy ASCII apostrofu , 39. Wartości ciągu można następnie konkatenować razem z operatorem konkatenacji .
Insert into Person
(First, Last)
Values
'Joe',
concat('O',char(39),'Brien')
Pojedyncze cytaty są unikane przez ich podwojenie ,
Poniższy kod SQL ilustruje tę funkcjonalność.
declare @person TABLE (
[First] nvarchar(200),
[Last] nvarchar(200)
)
insert into @person
(First, Last)
values
('Joe', 'O''Brien')
select * from @person
First | Last
===================
Joe | O'Brien
użyj podwójnych cudzysłowów wokół wartości.
insert into Person (First, Last) Values("Joe","O'Brien")
He said, "Don't!"
używając pojedynczych cudzysłowów i / lub podwójnych cudzysłowów - co można zrobić: 'He said, "Don''t!"'
lub "He said, ""Don't!"""
. Dodając nową odpowiedź do ustalonego pytania z zaakceptowanymi odpowiedziami, musisz podać nowe, pełne informacje. Używanie podwójnych cudzysłowów jest nowe - ale ograniczone do kilku DBMS; powinieneś starać się zidentyfikować co najmniej jednego z tych, którzy je akceptują.
Zamiast tego użyj klawisza strzałki wstecz (na klawiszu ~);
`O'Brien`