如何使用时间戳
在两个日期之间准确返回行此代码未在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'
答案 0 :(得分:2)
date_format
会返回字符串,因此between
正在使用字符串比较来确定这些值是否介于您提供的值之间。< / p>
因此,除非您的日期格式类似于yyyy-mm-dd
,否则between
不将按您的预期运作。
例如,日期 08-04-2015
介于两个日期01-04-2015
和07-05-2015
之间,但字符串 08-04-2015
}不在两个字符串01-04-2015
和07-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-2015
与08-05-2015 00:00:00
相同),假设MySQL将这些日期格式识别为dd-mm-yyyy
。
然而,即使它没有,你必须使用某些函数将这些字符串转换为timestamp
值,这是一次整体的事情查询而不是(最有可能)每一行。