Их можно сравнивать как текст, если фактические значения соответствуют ожидаемым. Это проблема.
Сравнение дат в тексте похоже на бег с ножницами. Но SQLite заставляет вас все время бегать с ножницами.
sqlite> create table test (d1 datetime primary key);
sqlite> insert into test values ('2011-31-31 08:63:00');
sqlite> select * from test;
2011-31-31 08:63:00
При переводе или обновлении значений, например «2011-31-31 08:63:00», дБмс, соответствующий стандартам SQL, вызовет ошибку «вне диапазона». Но SQLite позволяет вам вставлять что угодно. Вы даже можете вставить «Catcall» в столбец datetime. (Попробуйте.)
SQLite дает вам то же поведение "бег с ножницами", если вы используете текст.
sqlite> create table test (d1 varchar(25) primary key);
sqlite> insert into test values ('2011-31-31 08:63:00');
sqlite> select * from test;
2011-31-31 08:63:00
Если значения не соответствуют ожидаемым, вы, вероятно, увидите следующий тип поведения.
sqlite> create table test (d1 varchar(25), d2 varchar(25));
sqlite> insert into test values ('2011-01-01 08:00:00', '2011-01-01 08:15:00');
sqlite> select d1<d2 from test;
1
sqlite> update test set d2 = '2011+01-01 08:15:00';
sqlite> select d1<d2 from test;
0