portable - sqlite windows
Extraiga la primera palabra en una base de datos SQLite3 (5)
Tengo una base de datos SQLITE3 en la que he almacenado varias columnas. Una columna (cmd) en particular contiene la línea de comando completa y los parámetros asociados. ¿Hay alguna manera de extraer solo la primera palabra en esta columna (justo antes del primer espacio)? No estoy interesado en ver los diversos parámetros utilizados, pero sí quiero ver el comando emitido.
Aquí hay un ejemplo:
seleccione cmd desde log2 limit 3;
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
Del resultado anterior, me gustaría utilizar una función SQL en línea (si está disponible en SQLITE3) para analizar en la primera instancia de espacio, y tal vez usar una llamada de función izquierda (sé que esto no está disponible en SQLITE3) para devolver solo la cadena "user-sync". Lo mismo para "user-info" y "user-changes".
¿Algunas ideas?
Gracias.
Aquí hay un truco
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
Funciona siempre que su comando más largo tenga menos de 80 caracteres (e incluya 80 ''-'' caracteres en la cadena de sustitución - ¡No los conté!). Si sus comandos pueden contener ''-'' simplemente use un carácter diferente que no esté permitido en los comandos.
Como la posición de su primer personaje espacial es desconocida, no creo que haya una función central en SQLite que pueda ayudar.
Creo que tendrás que crear uno http://www.sqlite.org/c3ref/create_function.html
No creo que sea algo que puedas hacer dentro del SQL. El soporte de SQLite para las funciones de manejo de cadenas no es tan extenso como otros RDBMS (algunos de los cuales le permiten hacer un SUBSTR con un Reg Exp).
Mi sugerencia es escribir tu propia función de SQL como lo sugiere @Jon o simplemente hacerlo como un paso de post-procesamiento en tu código de aplicación.
La función "Encuentra la primera aparición" es una de las funciones básicas de SQLite3 ( http://www.sqlite.org/lang_corefunc.html ).
Por supuesto, es mucho mejor usar instr(X,Y)
.
Entonces puedes escribir:
SELECT substr(cmd,1,instr(cmd,'' '')-1) FROM log2
Mi solución:
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
Pros:
- no es un sucio truco
- solo usa funciones centrales