如何在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 中的撇号或单引号是一个特殊字符,用于指定字符串数据的开头和结尾。这意味着,如果你想在文本字符串中使用它,你需要转义
该特殊字符。对于单引号,通常通过将其加倍实现。(即两个单引号字符,而不是双引号代替单引号。)
注意:只有当您通过原始 SQL 接口手动编辑数据时才需要担心此问题,因为在开发和测试之外编写查询应该是罕见的。在代码中,根据您的技术栈,有一些技术和框架来处理转义特殊字符、SQL 注入等问题。
你只需要在单引号前再加一个单引号...
insert into Person (First, Last)
values ('Joe', 'O''Brien')
你需要对撇号进行转义。在T-SQL中,使用双撇号进行转义,因此你的 insert
语句变成:
Insert into Person
(First, Last)
Values
'Joe', 'O''Brien'
Values
必须用大括号括起来(这样就与 @JustinNiessner 的答案相同)。 - qwerty_so由于单引号用于指示字符串的开始和结束,因此需要对其进行转义。
简单来说,为了使SQL数据库将该值存储为'
,您需要使用两个单引号-''
。
考虑使用REPLACE来清理传入的值:
您需要检查字符串中是否存在''''
,如果存在,则将它们替换为''''''
,以转义孤立的单引号。
单引号需要加倍来转义,
下面的 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
如果是静态文本,您可以使用两个单引号而不是一个,如下所示:
DEC @text = 'Khabir''s Account'
在
Khabir
后面有两个单引号('')
如果您的文本不是静态的,并且是通过存储过程参数传递的,则
REPLACE(@text, '''', '')
另一种避免使用撇号的方法是编写字符串文字:
insert into Person (First, Last) values (q'[Joe]', q'[O'Brien]')
这是更好的方法,因为:
假设您有一个包含数千个名称的Excel列表,想要上传到您的数据库中。您可以简单地创建一个公式,使用单元格内容生成数千个INSERT语句,而不是手动查找撇号。
它也适用于其他转义字符。例如,将正则表达式模式值加载到表中,即 ^( *)(P|N)?( *)|( *)((<|>)\d\d?)?( *)|( )(((?i)(in|not in)(?-i) ?(('[^']+')(, ?'[^']+'))))?( *)$。
that's what she said ]' etc
?方括号的存在,可能跟着一个单引号,是否告诉它要中断值? - Suamere在值的周围使用双引号。
insert into Person (First, Last) Values("Joe","O'Brien")
'He said, "Don''t!"'
或"He said, ""Don't!"""
。当向已有被接受答案的老问题添加新答案时,您必须提供新的完整信息。使用双引号是一种新方法,但只限于少数几个数据库管理系统;您应该特别指出至少其中一个可接受它们的系统。 - Jonathan Leffler