mysql:不兼容日期之间

时间:2016-04-20 19:36:44

标签: mysql date between

我正在使用格式化日期编写一个Between查询.. 这是我的问题:

  

SELECT shop_id,date_format(registered_time,'%d-%m-%Y')as Date FROM   商店在哪里(date_format(registered_time,'%d-%m-%Y')BETWEEN   ' 2016年9月3日'和' 19-04-2016')

但是,当我执行查询时,无论月份如何,它都只提供日期09和19之间的记录。 例如,我有 30-03-2016,31-03-2016 等记录,但它们会被忽略。

如果有人能找到任何东西,请告诉我..

还有一点是,我正在从时间戳字段转换此日期。我希望这不会引起任何问题。

3 个答案:

答案 0 :(得分:2)

你不能把两个任意字符串(比如30-03-2016)和期望BETWEEN表现得像真正的DATE列一样(一种硬编码到mySQL中的行为) 。

您需要使用DATE的真实BETWEEN值才能正常工作。

  • 如果列已经是DATE列,则只需跳过格式:

    SELECT shop_id, registered_time FROM shops where registered_time 
    BETWEEN '2016-03-09' AND '2016-04-19'
    

如果您的现有列采用DD-MM-YYYY格式,请使用STR_TO_DATE()将其转换为日期 - 或者为了此查询而快速执行(sloooowwwww!)或永久。

答案 1 :(得分:1)

您需要将您的字符串转回MySQL理解的日期。来自文档:

CAST(datetime_col AS DATE)

应该有助于实现你想要的目标。

Reference

答案 2 :(得分:1)

您必须按如下所示将“ registered_time”字符串日期重新设置为日期。

STR_TO_DATE(DATE_FORMAT(registered_time,'%d /%m /%Y'),'%d /%m /%Y')在STR_TO_DATE('09 -03-2016','%d / %m /%Y')AND STR_TO_DATE('19 -04-2016','%d /%m /%Y')

这对我有用。