我有一个SQLITE3数据库,其中我存储了各种列。一列(cmd)特别包含完整的命令行和相关参数。有没有办法只提取此列中的第一个单词(就在第一个空格之前)?我对查看使用的各种参数不感兴趣,但确实希望看到发出的命令。
以下是一个例子:
从log2限制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
从上面的结果中,我想使用内联SQL函数(如果在SQLITE3中可用)来解析第一个空格实例,并且可能使用左函数调用(我知道这在SQLITE3中不可用)只返回“user-sync”字符串。 “用户信息”和“用户更改”相同。
有什么想法吗?
感谢。
答案 0 :(得分:5)
我的解决方案:
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
优点:
答案 1 :(得分:3)
由于你的第一个太空角色的位置未知,我认为SQLite中没有一个核心功能可以提供帮助。
答案 2 :(得分:2)
这是一个黑客
sqlite> create table test (a);
sqlite> insert into test values ("This is a test.");
sqlite> select * from test;
This is a test.
sqlite> select rtrim(substr(replace(a,' ','----------------------------------------------------------------------------------------'),1,80),'-') from test;
This
只要您的最长命令少于80个字符(并且在替换字符串中包含80' - '字符 - 我没有计算它们!),它就可以工作。如果您的命令可以包含“ - ”,则只使用命令中不允许的其他字符。
答案 3 :(得分:1)
我不相信你能在SQL内部做些什么。 SQLite对字符串处理函数的支持并不像其他RDBMS那样广泛(其中一些可以让你使用Reg Exp进行SUBSTR)。
我的建议是按照@Jon的建议编写自己的SQL函数,或者只是将其作为应用代码中的后处理步骤。
答案 4 :(得分:1)
“查找第一次出现”函数是SQLite3核心函数之一(http://www.sqlite.org/lang_corefunc.html)。
当然,使用instr(X,Y)
更好。
所以你可以写:
SELECT substr(cmd,1,instr(cmd,' ')-1) FROM log2