MySQL过滤器记录集使用DD-MM-YYYY日期格式

时间:2017-09-26 16:40:14

标签: mysql date filter format

我对如何按日期格式过滤记录感到有点困惑。

我在日期表中有日期(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') 没有幸福的脸,请让我知道。

由于

最高

1 个答案:

答案 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');