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

提取SQLite3数据库中的第一个单词,sqlite,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

我有一个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
从上面的结果来看,如果SQLITE3中有内联SQL函数,我想使用它来解析空间的第一个实例,或者使用我知道SQLITE3中没有的左函数调用来返回用户同步字符串。用户信息和用户更改也是如此

有什么想法吗


谢谢。

由于您的第一个空格字符的位置未知,我认为SQLite中没有corefunction会有所帮助


我认为您必须创建一个

我不相信您能够在SQL本身中做到这一点。SQLite对字符串处理函数的支持不如其他RDBMS广泛,其中一些RDBMS允许您使用Reg Exp执行SUBSTR

我的建议是要么按照@Jon的建议编写自己的SQL函数,要么只是在应用程序代码中作为后处理步骤来编写。

这里有一个技巧

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'-'个字符,它就可以工作-我没有计算它们!。如果命令可以包含“-”,请使用命令中不允许的其他字符。

发现第一个出现的函数是SQLite3核心函数之一

当然,最好使用instrX,Y

所以你可以写:

SELECT substr(cmd,1,instr(cmd,' ')-1) FROM log2
我的解决方案:

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
优点:

这不是一个肮脏的黑客 它只使用核心功能
没有,但有3个核心功能会有所帮助!看看我的答案。