在SQLite3数据库中提取第一个单词

far*_*any 5 sqlite

我有一个SQLITE3数据库,其中我存储了各种列.一列(cmd)特别包含完整的命令行和相关参数.有没有办法只提取此列中的第一个单词(就在第一个空格之前)?我对查看使用的各种参数不感兴趣,但确实希望看到发出的命令.

这是一个例子:

从log2 limit 3中选择cmd;

  user-sync //depot/PATH/interface.h
  user-info
  user-changes -s submitted //depot/PATH/build/...@2011/12/06:18:31:10,@2012/01/18:00:05:55
Run Code Online (Sandbox Code Playgroud)

从上面的结果来看,我想使用内联SQL函数(如果在SQLITE3中可用)来解析第一个空格实例,并且可能使用左函数调用(我知道这在SQLITE3中不可用)来返回"user-sync"字符串."user-info"和"user-changes"相同.

有任何想法吗?

谢谢.

小智 6

我的解决方案:

sqlite> CREATE TABLE command (cmd TEXT);
sqlite> INSERT INTO command (cmd) VALUES ('ls'),('cd ~'),('  mpv movie.mkv  ');
sqlite> SELECT substr(trim(cmd),1,instr(trim(cmd)||' ',' ')-1) FROM command;
ls
cd
mpv
Run Code Online (Sandbox Code Playgroud)

优点:

  • 这不是一个肮脏的黑客
  • 它只使用核心功能


Yah*_*hya 5

“查找第一次出现”函数是 SQLite3 核心函数之一(http://www.sqlite.org/lang_corefunc.html)。

当然,使用起来要好得多instr(X,Y)

所以你可以写:

SELECT substr(cmd,1,instr(cmd,' ')-1) FROM log2
Run Code Online (Sandbox Code Playgroud)