帮我解决这个问题。
我有一些数据存储在DB中,以毫秒为单位。但这不是我想要的格式,因此我将其转换为实际的日期格式。格式在运行时期间作为新列更新。
strftime(MillisField*1000,'%Y %m %d %H:%M:%s')
作为日期。
这将在新列中返回实际的日期和时间格式。
但问题是如果我想要一些特定数据的最后六个月,所以我尝试了这个:
MillisField > 2017-12-01
它没有向我显示过去六个月的数据, 但是,如果我试试这个:
MillisField > 1512066600000
它显示了我想要的确切结果,但我不想在几毫秒内给出,我需要它以日期格式。
答案 0 :(得分:0)
2017-12-01 = 2004 ,即没有引号是数字因此,从2017年减去01和12,因此结果是2004年小于1512066600000。
'2017-12-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)
即
datetime('2000-01-01') > datetime(1512066600,'unixepoch')
和
CAST(strftime('%s','2000-01-01') AS INTEGER) > 1512066600
可靠(即他们将不同的格式转换为兼容的格式进行比较)