2017-12-01 = 2004 , т. Е. Без кавычек является числовым, поэтому 01 и 12 вычитаются из 2017, и, следовательно, результат равен 2004, что намного меньше 1512066600000.
'2017-12-01' - строка, которая может привести к противоречивым результатам для самостоятельного сравнения.
Что вам нужно сделать, так это убедиться, что вы сравниваете лайк, а не разговорное сравнение яблок и апельсинов.
Следующее может помочь лучше понять, как вы можете сравнивать и как не следует
- две заданные даты 2017-12-01 (после даты в миллисах для проверки) и 2000-01-01 (перед данными в миллисах для проверки).
: -
SELECT
date('2000-01-01') AS date001,
date('2017-12-01') AS date002,
datetime('2000-01-01') AS dattim001,
datetime('2017-12-01') AS dattim002,
strftime('%s','2000-01-01') AS secs_date001, -- 946684800
strftime('%s','2017-12-01') AS secs_date002, -- 1512086400 (2017-11-30 18:30:00)
datetime(1512066600,'unixepoch') AS comparison_as_date,
-- Is 946684800 (2000-01-01) > 1512066600 (2017-11-30) (NO but!!)
datetime('2000-01-01') > 1512066600 AS compare001, -- 1 = true = yes (WRONG)
CAST(datetime('2000-01-01') AS INTEGER) > 1512066600 AS compare002, -- 0 = false = no (CORRECT)
datetime('2000-01-01') > datetime(1512066600,'unixepoch') AS compare003, -- 0 = false = no (CORRECT)
strftime('%s','2000-01-01') > 1512066600 AS compare004, -- 1 = true = yes (WRONG)
CAST(strftime('%s','2000-01-01') AS INTEGER) > 1512066600 AS compare005, -- 0 = false = no (CORRECT)
-- Is 1512086400 (2017-12-01) > 1512066600000 (2017-11-30) (YES but!!)
datetime('2017-12-01') > 1512066600 AS compare101, -- 1 = true = yes (CORRECT)
CAST(datetime('2017-12-01') AS INTEGER) > 1512066600 AS compare102, -- 0 = false = no (WRONG)
datetime('2017-12-01') > datetime(1512066600,'unixepoch') AS compare103, -- 1 = true = yes (CORRECT)
strftime('%s','2017-12-01') > 1512066600 AS compare104, -- 1 = true = yes (CORRECT)
CAST(strftime('%s','2017-12-01') AS INTEGER) > 1512066600 AS compare105 -- 1 = true = yes (CORRECT)
Следовательно: -
- сравнить001 / 101, сравнить002 / 102 и сравнить004 / 104 не всегда вернут правильные результаты
- Compare003 / 103 и Compare005 / 105 соответствуют
т.е. * * тысяча двадцать восемь
datetime('2000-01-01') > datetime(1512066600,'unixepoch')
и
CAST(strftime('%s','2000-01-01') AS INTEGER) > 1512066600
Надежны (т.е. они преобразуют различные форматы в совместимые форматы для сравнения)
Результаты приведенного выше SQL
Выше приведено (разделено на 2 для отображения): -
