对于拥有比我更多SQLite经验的人来说,这应该是一个简单的方法。 我需要一个select语句来从以下示例字符串中获取名称:
{"email":"12345678@facebook.com","user_key":"FACEBOOK:12345678","name":"John Smith"}
我需要的输出是John Smith。
名称前面的字符数并不总是相同,因此简单的substr命令不起作用。它需要是动态的,因此它可以找到名称开始的位置然后吐出来。我认为ltrim或rtrim可能有所帮助,但即使在研究了这些命令后,我也不太了解它们。此外,SQLite不提供内容或位置,这也可能有用!
编辑:此表的架构如下:
CREATE TABLE messages (msg_id TEXT PRIMARY KEY, thread_id TEXT, action_id INTEGER, subject TEXT, text TEXT, sender TEXT, timestamp_ms INTEGER, timestamp_sent_ms INTEGER, attachments TEXT, shares TEXT, msg_type INTEGER, affected_users TEXT, coordinates TEXT, offline_threading_id TEXT, source TEXT, channel_source TEXT, is_non_authoritative INTEGER, pending_send_media_attachment STRING, handled_internally_time INTEGER, pending_shares STRING, pending_attachment_fbid STRING, client_tags TEXT, send_error STRING, send_error_message STRING, send_error_timestamp_ms INTEGER, publicity TEXT, tracking TEXT );
CREATE INDEX messages_offline_threading_id_index ON messages ( offline_threading_id );
CREATE INDEX messages_timestamp_index ON messages ( thread_id, timestamp_ms DESC );
CREATE INDEX messages_type_index ON messages ( thread_id, msg_type, timestamp_ms );
我正在使用的上面的字符串来自发件人列。
答案 0 :(得分:0)
我不知道您正在使用的语言,但大多数语言支持用户定义的功能(http://www.sqlite.org/c3ref/create_function.html),您可以这样做
select jsonGetName(columnWithJsonText) from messages where ...
它类似于对您的编程语言的回调,您在sqlite中使用jsonGetName()时定义了哪个C / Java / PHP函数被调用。
在该函数中(使用您选择的语言)解码json字符串并返回name属性。