插入带有撇号的值的正确SQL语法是什么?

Insert into Person
  (First, Last)
Values
  'Joe',
  'O'Brien'

我一直得到一个错误,因为我认为O后面的撇号是值的结束标记。


当前回答

Eduffy有个好主意。他只是在代码示例中搞反了。在JavaScript或SQLite中,都可以用重音符号替换撇号。

他(我确信是偶然地)将重音符号作为字符串的分隔符,而不是替换O'Brian中的撇号。事实上,对于大多数情况,这是一个非常简单的解决方案。

其他回答

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

Insert into Person
(First, Last)
Values
'Joe', 'O''Brien'

可以通过使用撇号的ASCII表查找值39调用CHAR函数来插入撇号字符。然后可以使用连接操作符将字符串值连接在一起。

Insert into Person
  (First, Last)
Values
  'Joe',
  concat('O',char(39),'Brien')

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

DEC @text = 'Khabir''s Account'

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

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

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

因为单引号用于表示字符串的开始和结束;你需要逃离它。

简单的回答是使用两个单引号- " -以便SQL数据库将值存储为'。

看一下使用REPLACE来清除传入值:

甲骨文取代 SQL Server REPLACE MySQL取代 PostgreSQL取代

您希望检查'''',如果它们存在于字符串中,则将它们替换为'''''',以便转义单个单引号。

Eduffy有个好主意。他只是在代码示例中搞反了。在JavaScript或SQLite中,都可以用重音符号替换撇号。

他(我确信是偶然地)将重音符号作为字符串的分隔符,而不是替换O'Brian中的撇号。事实上,对于大多数情况,这是一个非常简单的解决方案。