为什么我不能正确地在时间戳之间返回两个日期之间的行

时间:2015-05-07 09:27:32

标签: mysql

如何使用时间戳

在两个日期之间准确返回行

此代码未在01-04和07-05之间返回所有行

那么问题是什么以及为什么它没有正常工作

以及当我使用日期

时如何选择两个日期与时间戳之间的行

格式如此01-04-2015

SELECT d_send_items.si_id ,
  DATE_FORMAT(FROM_UNIXTIME(d_send_items.si_send_date), '%d-%m-%Y')
FROM d_send_items WHERE
  DATE_FORMAT(FROM_UNIXTIME(d_send_items.si_send_date), '%d-%m-%Y') BETWEEN '01-04-2015' AND '07-05-2015' 

1 个答案:

答案 0 :(得分:2)

date_format会返回字符串,因此between正在使用字符串比较来确定这些值是否介于您提供的值之间。< / p>

因此,除非您的日期格式类似于yyyy-mm-dd,否则between 将按您的预期运作。

例如,日期 08-04-2015介于两个日期01-04-201507-05-2015之间,但字符串 08-04-2015 }不在两个字符串01-04-201507-05-2015之间,因为最重要的部分08超出了终止于07...的范围。

所以你可以使用:

where
  date_format(from_unixtime(d_send_items.si_send_date), '%Y-%m-%d')
   between '2015-04-01' and '2015-05-07'

但是在关系数据库中,每行功能永远不会很好地扩展。

如果他们是timestamp个正确的字段,我认为您也可以绕过转换并使用以下内容:

where d_send_items.si_send_date >= '01-04-2015'
  and d_send_items.si_send_date <  '08-05-2015'

(注意第二个条件的< day following位,因为08-05-201508-05-2015 00:00:00相同),假设MySQL将这些日期格式识别为dd-mm-yyyy

然而,即使它没有,你必须使用某些函数将这些字符串转换为timestamp值,这是一次整体的事情查询而不是(最有可能)每一行。