2012-11-27 13 views
12

Sto cercando di ottenere i miei file di dati (di cui ce ne sono almeno una dozzina) in tabelle all'interno di SQLite. Ogni file ha un colpo di testa e sarò ricevendo loro un paio di volte nel corso del prossimo anno quindi mi piacerebbe: modificaSQLite3 Importa CSV ed escludi/salta intestazione

  1. Evitare ogni file per rimuovere l'intestazione quando li ricevo;
  2. Evitare di ricorrere agli script di shell o Python per fare ciò.

definisco i miei dati della tabella e importare ...

> .separator "\t" 
> .headers on 
> CREATE TABLE clinical(
     patid  VARCHAR(20), 
     eventdate CHAR(10), 
     sysdate CHAR(10), 
     constype INT, 
     consid  INT, 
     medcode INT, 
     staffid VARCHAR(20), 
     textid  INT, 
     episode INT, 
     enttype INT, 
     adid   INT); 
> .import "Sample_Clinical001.txt" clinical 
> SELECT * FROM clinical LIMIT 10; 
patid eventdate sysdate constype consid medcode staffid textid episode enttype adid 
patid eventdate sysdate constype consid medcode staffid textid episode enttype adid 
471001 30/01/1997 09/03/1997 4 68093 180 0 0 0 20 11484 
471001 30/01/1997 09/03/1997 2 68093 60 0 0 0 4 11485 

Il mio primo pensiero è stato quello di eliminare la riga incriminata, ma che non ha funzionato come previsto, invece eliminato l'intera tabella ..

> DELETE FROM clinical WHERE patid = "patid"; 
> SELECT * FROM clinical LIMIT 3; 
> 

Ho ottenuto la sintassi per l'uguaglianza dei test errata? Non ne sono sicuro; the docs non sembrano distinguere tra i due. Ho pensato di riprovare ...

> .import "Sample_Clinical001.txt" clinical 
> SELECT * FROM clinical LIMIT 3; 
patid eventdate sysdate constype consid medcode staffid textid episode enttype adid 
patid eventdate sysdate constype consid medcode staffid textid episode enttype adid 
471001 30/01/1997 09/03/1997 4 68093 180 0 0 0 20 11484 
471001 30/01/1997 09/03/1997 2 68093 60 0 0 0 4 11485 
> DELETE FROM clinical WHERE patid == "patid"; 
> SELECT * FROM clinical LIMIT 3; 
> 

Sono sulla pista giusta o sto facendo qualcosa di stupido?

Mi sarei aspettato che ci fosse un'opzione facile per saltare la riga di intestazione quando si chiama .import poiché le righe di intestazione nei file di testo è una situazione abbastanza comune.

risposta

6

patid è un nome di colonna.
"patid" è un nome di colonna quotato.
'patid' è una stringa.

La condizione WHERE patid = "patid" confronta il valore nella colonna patid con se stesso.

(SQLite permette stringhe con virgolette doppie per la compatibilità con MySQL, ma solo quando una stringa non può essere confuso con un nome di tabella/colonna.)

+0

Ah, ah! Grazie non avevo notato questa sottile sfumatura. – slackline

+0

Giusto per essere sicuro, la condizione che farebbe la cancellazione corretta dovrebbe essere WHERE patid = "'patid'", corretto? – gvrocha

+0

@gvrocha No, "" '...' "' non ha senso. –

Problemi correlati