插入带有撇号的值的正确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')

其他回答

你需要省略撇号。在T-SQL中,这是一个双撇号,所以你的插入语句变成:

Insert into Person
(First, Last)
Values
'Joe', 'O''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注入等。

使用反勾号(在~键上)代替;

`O'Brien`

如果它是静态文本,你可以使用两个单引号而不是一个,如下所示:

DEC @text = 'Khabir''s Account'

在Khabir后面有两个单引号(")

如果你的文本不是静态的,它被传递在存储过程参数,那么

REPLACE(@text, '''', '')

单引号通过双引号转义,

下面的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