On 2014/07/18 22:56, Rui Fernandes wrote:
I already know how to import a csv file, and save it in SQLite format.
But how can I define the time of variable in the fields since it assumes
all of them are TEXT?

I assume you mean "type" of variable (and not "time") - else see the reply from 
Mr. Griggs.

If you mean type - this is not possible with importing a CSV from scratch via sqlite3.exe because we know nothing of the file being imported before it is imported - at which point the schema already needs to exist.

It also depends how often you need to do this. Do you only want to import the data once, or at least, only need to specify the schema once? Or is it different schemata every time over which you need some control of the variable types?

Either way, one possibility is to define the table manually before importing 
the data. Let's assume you have data like this:

rTime, sName, iAge
2014-07-14 15:33:22,John Smith,30
2014-07-14 16:31:25,William Gates,43

If you simply import it to a new non-existing table, it will all have TEXT 
affinity, as you already noticed.

but if you do first as an example table schema:
CREATE TABLE people_db (
    rTime NUMERIC NOT NULL,
    sName TEXT COLLATE NOCASE,
    iAge INT DEFAULT 0
);

and then import the same data as above, you ill now have a correctly typed 
structure.

Important, you can do this before importing, or after importing. To explain the "after importing" scenario, imagine you imported the csv to a table named "import_temp", knowing it will have those columns all as text.

Now you can run simply the schema creation again, followed by an import from 
the other DB rather than the csv, like this:
CREATE TABLE people_db (
    rTime NUMERIC NOT NULL,
    sName TEXT COLLATE NOCASE,
    iAge INT DEFAULT 0
);
INSERT INTO people_db (rTime,sName,iAge) SELECT CAST(rTime AS NUMERIC), sName, 
CAST(iAge AS INT) FROM import_temp;
DROP TABLE import_temp;

Maybe wrapping all in a Transaction.

sName is already Text, so no need to cast. I am not even sure if the casts are needed at all, having set the Schema correctly, but it might highlight where the csv contain invalid types of data (i.e. which cannot be type-cast as needed).

This is rather easy to do in a script too, as long as you know before the time 
what the data types should be.

Another method, if you have very complicated tables that you will only import once, is to maybe use an importer tool, almost all DB admin type programs have some flavour of it available. We could suggest some if this is a viable route.

Hope it helps,
Ryan

(I have not tested any of the posted SQL above, but if it is faulty, should be 
easy to fix)

_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to