MySQL正确的比较日期

时间:2019-03-26 07:57:15

标签: mysql sql database

在我的数据库中,我有表“ leads”和列“ datum_event”(varchar)。我需要在“从”到“到” datum_event之间获取行。例如,从30.11.2018到31.03.2019。我使用str_to_date将varchar转换为要比较的日期。

我的SQL:

SELECT DISTINCT(l.lead_id)
FROM leads as l
WHERE STR_TO_DATE(datum_event,'%d.%m.%y') >= STR_TO_DATE('30.11.2018','%d.%m.%y')
  AND STR_TO_DATE(datum_event,'%d.%m.%y') <= STR_TO_DATE('31.03.2019','%d.%m.%y')
ORDER BY  l.lead_id  desc

但是现在我得到的结果是空的。这是错误的。有datum_event '01 .12.2018'的行,但我在结果中看不到它。

如果比较日期在一年中,例如从01.01.2019到31.03.2019,我可以看到结果,但是如果我从2018年12月31日开始比较,我看不到任何结果。

请帮助我,我该如何解决?谢谢。

2 个答案:

答案 0 :(得分:0)

您也许可以使用SQL BETWEEN条件。

SELECT DISTINCT(l.lead_id)
FROM leads as l
WHERE (STR_TO_DATE(datum_event,'%d.%m.%y') BETWEEN 
STR_TO_DATE('30.11.2018','%d.%m.%y') AND STR_TO_DATE('31.03.2019','%d.%m.%y'))
ORDER BY  l.lead_id  desc`

答案 1 :(得分:0)

select STR_TO_DATE('30.11.2018','%d.%m.%y')将返回2020-11-30 但是您需要2018-11-30这个日期,因此您必须进行如下更改 格式

  select STR_TO_DATE('30.11.2018','%d.%m.%Y') this will `2018-11-30`

我已将日期格式添加为演示link

因此在查询中,您需要更正格式

SELECT l.lead_id
FROM leads as l
WHERE STR_TO_DATE(datum_event,'%d.%m.%Y') >= STR_TO_DATE('30.11.2018','%d.%m.%Y')
  AND STR_TO_DATE(datum_event,'%d.%m.%Y') <= STR_TO_DATE('31.03.2019','%d.%m.%Y')
ORDER BY  l.lead_id  desc