SQLite select语句提取部分字符串

时间:2014-08-06 22:08:00

标签: sqlite

对于拥有比我更多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 );

我正在使用的上面的字符串来自发件人列。

1 个答案:

答案 0 :(得分:0)

我不知道您正在使用的语言,但大多数语言支持用户定义的功能(http://www.sqlite.org/c3ref/create_function.html),您可以这样做

select jsonGetName(columnWithJsonText) from messages where ...

它类似于对您的编程语言的回调,您在sqlite中使用jsonGetName()时定义了哪个C / Java / PHP函数被调用。

在该函数中(使用您选择的语言)解码json字符串并返回name属性。