MySQL使用表中存储的时间戳过滤数据

时间:2019-05-27 16:19:09

标签: mysql

我已将帐单日期存储在mysql的timestamp中。

在报告中,我以dd-mm-YYYY的格式获取日期和日期。在查询中,我是这样使用的,

WHERE  (from_unixtime(bill.bill_date,"%d-%m-%Y")) >='06-04-2019' AND (from_unixtime(bill.bill_date,"%d-%m-%Y")) <= '30-04-2019'

但是也获取了06/05/2019的数据。我不知道为什么会这样。

3 个答案:

答案 0 :(得分:1)

您对值'06 -05-2019'大于'06 -04-2019'感到惊讶吗?

您不能将日期{%1%}用作>=等不等式。 MySQL倾向于使用%Y-%m-%d格式,这是它在检查日期和不等式比较的排序顺序时采用的格式。

您应使用FROM_UNIXTIME(),且不要使用格式参数。然后它将以%Y-%m-%d格式返回日期,该格式确实支持不平等比较。

使用%Y-%m-%d格式的日期文字。

我会这样写你的表情:

WHERE from_unixtime(bill.bill_date) BETWEEN '2019-04-06' AND '2019-04-30'

答案 1 :(得分:0)

您是否尝试过使用between

WHERE (from_unixtime(bill.bill_date,"%d-%m-%Y")) BETWEEN '06-04-2019' AND '30-04-2019'

答案 2 :(得分:0)

您要为列指定格式,而不是条件值。试试:

WHERE  (from_unixtime(bill.bill_date,"%d-%m-%Y")) >=STR_TO_DATE('06-04-2019', '%d-%m-%Y') AND (from_unixtime(bill.bill_date,"%d-%m-%Y")) <= STR_TO_DATE('30-04-2019', '%d-%m-%Y')

或更妙的是:

WHERE (from_unixtime(bill.bill_date,'%Y-%m-%d')) BETWEEN '2019-04-06' AND '2019-04-30'