我试图基于 SQLite 中的字符串进行查询,但我遇到的问题是字符串包含双引号 (")。我还没有弄清楚如何转义它。
我正在将 数据库浏览器用于 SQLite 。字符串是 3"Nail 。它以编程方式插入,但是当我尝试以编程方式或通过 SQLite 浏览器查询它时,它返回零行,记录我的查询,但字符串文字为 '3" Nail' ( 'quot' 部分后面有一个分号,但我不能把它放在这里,或者它把它翻译成“)。我怀疑这是我的问题;插入的字符与我尝试查询的字符不同,但我不知道如何确定这一点。
作为记录,我尝试使用单引号 (') 和反斜杠 (\) 进行转义,因此我尝试了以下查询:
1. SELECT * FROM TABLE WHERE NAME = '3" Nail';
2. SELECT * FROM TABLE WHERE NAME = '3\" Nail';
3. SELECT * FROM TABLE WHERE NAME = '3'" Nail';
4. SELECT * FROM TABLE WHERE NAME = '3'''' Nail';
5. SELECT * FROM TABLE WHERE NAME = '3\'\' Nail';
非常感激任何的帮助!
- - -更新 - - -
全部。我道歉。取消狩猎。我已经弄清楚了这个问题。
为了简化问题,我展示了一个简单的查询,但我实际尝试的查询更复杂。它涉及一个 JOIN,它失败了,因为插入数据的功能关闭了。它首先插入到一个表中,然后在该表中查询刚刚插入的项目的 ID,并在插入到第二个表中时使用该 ID。该查询在名称周围使用转义双引号 (\") 而不是单引号 (')。显然这在正常情况下工作正常,但在双引号的情况下会窒息,因此对 ID 的查询返回零行,并且,因此,没有执行二次插入。
由于我的查询使用了这些表的 JOIN,并且第二个表中没有该名称的数据,因此它成功完成,但返回零行。我已经检查了第一个表以确保我需要的数据在那里,但我什至没有想过检查另一个表。
我更正了插入功能,现在查询正常工作。
在发布问题之前,我应该做更好的调查工作。我深表歉意,但衷心感谢您的帮助。
最佳答案
SQL 标准指定字符串中的单引号通过将两个单引号放在一行中来转义。在这方面,SQL 的工作方式类似于 Pascal 编程语言。 SQLite 遵循此标准。
它也适用于双引号。
INSERT INTO TABLENAME VALUES("WHAT""S THAT")
INSERT INTO TABLENAME VALUES("WHAT''S THAT")
读这个 How do I use a string literal that contains an embedded single-quote (') character
关于sql - 如何在 SQLite 查询中转义字符串中的双引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41383538/