ABS在sqlite中不起作用

时间:2014-10-23 13:37:03

标签: sql sqlite

我有一个包含一些日期警报的数据库:

id          timealarm                        status
1           2014-10-23 13:30:00 +0000         1 
2           2014-10-23 13:29:00 +0000         1

我试图做的就是将当前日期发送到sql并执行abs,以便获取最接近当前日期的值(日期):

SELECT * FROM records WHERE status = '1' ORDER BY ABS('2014-10-23 13:27:09 +0000' - timealarm) LIMIT 1

在这种情况下,此语法会返回 id 1 ,而不是 id 2 ,为什么以及如何解决此问题?

EDIT
  

字段timealarm是VARCHAR

1 个答案:

答案 0 :(得分:0)

当您尝试相互减去字符串时,数据库会将它们转换为数字。 因此,您最终会从2014年减去2014年,这会导致所有行的值相同。

为了能够计算差异,将日期字符串转换为某个数字(这需要删除时区信息,而SQLite date functions无法理解):

...
ORDER BY abs(julianday('2014-10-23 13:27:09') - julianday(substr(timealarm, 1, 19)))
...