Який правильний синтаксис SQL, щоб вставити в нього значення з апострофом?
Insert into Person
(First, Last)
Values
'Joe',
'O'Brien'
Я продовжую отримувати помилку, оскільки я думаю, що апостроф після O є закінчувальним тегом для значення.
Який правильний синтаксис SQL, щоб вставити в нього значення з апострофом?
Insert into Person
(First, Last)
Values
'Joe',
'O'Brien'
Я продовжую отримувати помилку, оскільки я думаю, що апостроф після O є закінчувальним тегом для значення.
Відповіді:
Уникніть апострофа (тобто подвоєння символу єдиної цитати) у вашому SQL:
INSERT INTO Person
(First, Last)
VALUES
('Joe', 'O''Brien')
/\
right here
Те саме стосується SELECT запитів:
SELECT First, Last FROM Person WHERE Last = 'O''Brien'
Апостроф або окрема цитата - це особливий символ у SQL, який визначає початок і кінець рядкових даних. Це означає, що щоб використовувати його як частину ваших буквальних даних рядка, вам потрібно escape
спеціальний символ. За допомогою однієї цитати це зазвичай здійснюється шляхом подвоєння вашої пропозиції. (Два символи однієї цитати, а не подвійна замість однієї цитати.)
Примітка : Ви повинні коли-небудь турбуватися про цю проблему, лише коли ви вручну редагуєте дані через необроблений інтерфейс SQL, оскільки написання запитів поза розробкою та тестуванням має бути рідкісним явищем. У коді є прийоми та рамки (залежно від вашого стека), які забезпечують уникнення спеціальних символів, ін'єкцію SQL тощо.
Вам просто потрібно подвоїтись на одиничних котируваннях ...
insert into Person (First, Last)
values ('Joe', 'O''Brien')
Оскільки для позначення початку та кінця рядка використовується одна лапка; вам потрібно уникнути цього.
Коротка відповідь полягає у використанні двох одиничних лапок - ''
- для того, щоб база даних SQL зберігала значення як '
.
Подивіться на використання REPLACE для очищення вхідних значень:
Ви хочете перевірити ''''
і замінити їх, якщо вони є в рядку ''''''
, щоб уникнути самотньої цитати.
eduffy мала гарну ідею . Він просто отримав це назад у прикладі коду. Або в JavaScript, або в SQLite ви можете замінити апостроф символом наголосу.
Він (випадково я впевнений) розмістив символ наголосу як роздільник для рядка замість заміни апострофа в О'Бріані. Це насправді жахливо просте рішення для більшості випадків.
Символ апострофа можна вставити, викликавши функцію CHAR зі значенням пошуку таблиці апострофа ASCII , 39. Значення рядків можна потім об'єднати разом з оператором конкатенату .
Insert into Person
(First, Last)
Values
'Joe',
concat('O',char(39),'Brien')
Одномісні котирування виходять, подвоївши їх ,
Наступний SQL ілюструє цю функціональність.
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
використовувати подвійні лапки навколо значень.
insert into Person (First, Last) Values("Joe","O'Brien")
He said, "Don't!"
використовуючи одинарні та / або подвійні лапки - що можна зробити: 'He said, "Don''t!"'
або "He said, ""Don't!"""
. Додаючи нову відповідь на давно поставлене запитання із прийнятими відповідями, ви повинні надати нову, повну інформацію. Використання подвійних лапок є новим - але обмежено кількома СУБД; вам слід докласти болю, щоб визначити хоча б один із тих, хто їх приймає.
Використовуйте замість цього зворотний зв'язок (на клавіші ~);
`O'Brien`