我对如何按日期格式过滤记录感到有点困惑。
我在日期表中有日期(yyyy-mm-dd)数据类型的日期列。
前:
date
-----
2017-01-29
2017-01-30
我想改变格式(dd-mm-yyyy)。我使用此代码
SELECT
DATE_FORMAT(`date`, '%d-%m-%Y') as date
FROM
dim_date;
date
-----
29-01-2017
30-01-2017
我想用(dd-mm-yyyy)格式过滤记录。所以我尝试了这段代码。
SELECT
DATE_FORMAT(`date`, '%d-%m-%Y') date
FROM
dim_date
WHERE DATE_FORMAT(`date`, '%d-%m-%Y') BETWEEN '20-04-2015' AND '06-09-2017';
结果 的没有
但如果我尝试使用原始格式(yyyy-mm-dd)进行过滤,那么它可以工作。
SELECT DATE_FORMAT(`date`, '%d-%m-%Y') date
FROM dim_date
WHERE DATE_FORMAT(`date`, '%Y-%m-%d') BETWEEN '2015-04-20' AND '2017-01-07';
为什么Mysql会出现这种奇怪的行为?我在这里错过了什么吗?
我还尝试使用此格式DATE_FORMAT(
日期, '%d-%c-%Y')
,DATE_FORMAT(
日期, '%d-%l-%Y')
& DATE_FORMAT(
日期, '%e-%l-%Y')
没有幸福的脸,请让我知道。
由于
最高
答案 0 :(得分:0)
使用您的查询转换字符串中的日期,然后您使用错误的顺序(' 20'>' 06')比较值,因此不能正常工作。 介于最小值和第二个最大值之间。
如果您正在使用日期,则可以转换字符串日期
因此,正确工作和避免字符串行为之间的位置是过滤器
SELECT date
FROM dim_date
WHERE date BETWEEN str_to_dat('20-04-2015', '%d-%m-%Y')
AND str_to_date('06-09-2017', '%d-%,-%Y');