2012-02-27 13 views
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.Extracto de la primera palabra en una base de datos SQLite3

Aquí está un ejemplo:

seleccione cmd de límite log2 3;

user-sync //depot/PATH/interface.h 
    user-info 
    user-changes -s submitted //depot/PATH/build/[email protected]/12/06:18:31:10,@2012/01/18:00:05:55 

partir del resultado anterior, me gustaría utilizar una función en línea de SQL (si está disponible en Sqlite3) para analizar en la primera instancia de espacio, y tal vez utilizar una llamada de función izquierda (Sé que esto no es disponible en SQLITE3) para devolver solo la cadena "user-sync". Lo mismo para "user-info" y "user-changes".

¿Alguna idea?

Gracias.

Respuesta

5

Mi soluion:

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 que un truco sucio
  • que sólo utiliza funciones básicas
3

Como la posición de su primer carácter espacial es desconocida, no creo que haya una función central en SQLite que pueda ayudar.

creo que tendrá que crear uno http://www.sqlite.org/c3ref/create_function.html

+0

No, pero hay 3 funciones principales que ayudarán. Ver mi respuesta –

1

no creo que eso es algo que va a ser capaz de hacerlo en el propio 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 su propia función de SQL como lo sugiere @Jon o simplemente hacerlo como un paso de post-procesamiento en el código de su aplicación.

2

Aquí un corte

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 y cuando su comando más largo es de menos de 80 caracteres (y que incluyen 80 '-' caracteres en la cadena de sustitución - No conté ellos!) . Si sus comandos pueden contener '-' simplemente use un carácter diferente que no esté permitido en los comandos.

+2

¡Eso es inteligente! – jon

1

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 favor, es mucho mejor usar instr(X,Y).

para que pueda escribir:

SELECT substr(cmd,1,instr(cmd,' ')-1) FROM log2 
Cuestiones relacionadas