Часть between '2009-08-23' and '2009-08-23'
всегда ложна, потому что это диапазон нулевого времени, из-за отсутствия лучшего описания.
Если вы хотите, чтобы элементы встречались ровно 2009-08-23, выберите between '2009-08-23' and '2009-08-24'
, который будет варьироваться от полуночи 23-го до полуночи 24-го.
Вот пример этого в действии:
sqlite> CREATE TABLE t (d DATETIME);
sqlite> SELECT DATETIME('now');
2009-08-24 02:32:20
sqlite> INSERT INTO t VALUES (datetime('now'));
sqlite> SELECT * FROM t;
2009-08-24 02:33:42
sqlite> SELECT * FROM t where d BETWEEN '2009-08-24' and '2009-08-24';
sqlite> SELECT * FROM t where d BETWEEN '2009-08-24' and '2009-08-25';
2009-08-24 02:33:42