I’ve got an Sqlite database where one of the columns is defined as “TEXT NOT NULL”. Some of the values are strings and some can be cast to a DOUBLE and some can be case to INTEGER. Once I’ve narrowed it down to DOUBLE values, I want to do a query that gets a range of data. Suppose my column is named “Value”. Can I do this?
SELECT * FROM Tbl WHERE ... AND Value >= 23 AND Value < 42
Is that going to do some kind of ASCII comparison or a numeric comparison? INTEGER or REAL? Does the BETWEEN operator work the same way?
And what happens if I do this?
SELECT MAX(Value) FROM Tbl WHERE ...
Will it do string or integer or floating-point comparisons?
It is all explained in the Datatypes In SQLite Version 3 article. For example, the answer to the first portion of questions is
This is why
SELECT 9 < '1'andSELECT 9 < '11'both give1(true).The most important point to know is that column type is merely an annotation; SQLite is dynamically typed so each value can have any type.