SQLite更新将双引号(“”)更改为常规引号(“)?

时间:2013-08-16 23:41:42

标签: iphone ios objective-c sqlite

在iPhone应用上工作。我刚刚将一些记录导入SQL Lite数据库,并且所有常规引号都被“加倍”。一个例子:

所需的最终格式: 歌曲“ABC”将在下午3点播放。

该记录目前在数据库中显示为:

歌曲“”ABC“”将在下午3点播放。

有谁知道如何进行SQL更新以将所有“双倍”引号更改为常规引号?

只是为了澄清,我正在直接查看数据库,而不是通过代码。代码只会将它们显示为“双倍”引号,就像它们出现在数据库中一样,所以我想删除它们。 “双重”引号实际上也在导入文件中,但如果我尝试删除它们,则导入失败。所以我把它们保存在那里,现在记录已成功导入到数据库中,现在我只想用大量SQL更新来纠正“双重”引用事件,如果可能的话。提前感谢任何见解!

1 个答案:

答案 0 :(得分:2)

SQLite使用单引号来转义字符串文字。它通过添加另一个单引号(同样用于双引号)来逃避单引号。从技术上讲,只要您的SQL构造良好,导入过程就可以正常工作。字符串应该用单引号括起来,而不是双引号。我怀疑你的代码可能是手工构建SQL而不是绑定/正确转义值。

SQLite有一个内置函数来引用字符串。这叫做报价。以下是一些示例输入和相应的输出:

sqlite> SELECT quote("foo");
'foo'
sqlite> SELECT quote("foo ""bar""");
'foo "bar"'
sqlite> SELECT quote("foo 'bar'");
'foo ''bar'''

所以你可以在使用NSString方法转到SQLite之前删除两次转义的双引号。

[@"badString\"\"" stringByReplacingOccurrencesOfString:@"\"\"" withString:@"\""];

如果数据库已经包含错误值,那么您可以运行以下更新SQL来清理它:

UPDATE table SET column = REPLACE(column, '""', '"');