我正在使用格式化日期编写一个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 等记录,但它们会被忽略。
如果有人能找到任何东西,请告诉我..
还有一点是,我正在从时间戳字段转换此日期。我希望这不会引起任何问题。
答案 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)
答案 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')
这对我有用。