插入带有撇号的值的正确SQL语法是什么?
Insert into Person
(First, Last)
Values
'Joe',
'O'Brien'
我一直得到一个错误,因为我认为O后面的撇号是值的结束标记。
插入带有撇号的值的正确SQL语法是什么?
Insert into Person
(First, Last)
Values
'Joe',
'O'Brien'
我一直得到一个错误,因为我认为O后面的撇号是值的结束标记。
当前回答
可以通过使用撇号的ASCII表查找值39调用CHAR函数来插入撇号字符。然后可以使用连接操作符将字符串值连接在一起。
Insert into Person
(First, Last)
Values
'Joe',
concat('O',char(39),'Brien')
其他回答
在SQL中转义撇号(即双引号字符):
INSERT INTO Person
(First, Last)
VALUES
('Joe', 'O''Brien')
/\
right here
同样适用于SELECT查询:
SELECT First, Last FROM Person WHERE Last = 'O''Brien'
撇号或单引号是SQL中的一个特殊字符,用于指定字符串数据的开始和结束。这意味着要使用它作为你的字面值字符串数据的一部分,你需要转义特殊字符。与一个单一的报价,这通常是通过加倍你的报价。(两个单引号字符,不是双引号而不是单引号。)
注意:只有在通过原始SQL接口手动编辑数据时才应该担心这个问题,因为在开发和测试之外编写查询应该是很少发生的。在代码中,有一些技术和框架(取决于你的堆栈)负责转义特殊字符、SQL注入等。
另一种转义撇号的方法是写一个字符串字面量:
insert into Person (First, Last) values (q'[Joe]', q'[O'Brien]')
这是一个更好的方法,因为:
假设您有一个包含1000个名称的Excel列表,您希望将其上传到数据库。您可以简单地创建一个公式,用单元格内容生成1000条INSERT语句,而不是手动查找撇号。 它也适用于其他转义字符。例如加载一个Regex模式值,即^(*)(P|N)?(*)|(*)((<|>)\d\d?)?( *)|( )(((? 我)(在|不是)(? -我 ) ?(('[^']+')(, ?'[^']+'))))?(*)$到表中。
你只需要把单引号加倍…
insert into Person (First, Last)
values ('Joe', 'O''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
你需要省略撇号。在T-SQL中,这是一个双撇号,所以你的插入语句变成:
Insert into Person
(First, Last)
Values
'Joe', 'O''Brien'