2017-09-26 186 views
0

我对如何按日期格式筛选记录有点困惑。使用DD-MM-YYYY设置MySQL筛选记录日期格式

我在日期表中有date(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

我没有看到这两个查询之间的区别..。 。请详细解释 – scaisEdge

+0

'Date_format'会给你一个字符串。如果你把你的值作为一个字符串进行比较,那么就不会有'> = 2'和'<= 0'的字符(这就是'2'和'0'之间'要查找的内容)。你为什么要这样使用它?您可以将您的输入转换为有效日期并比较有效日期。它也可以让你使用索引。而且,它实际上会根据您的需要进行过滤。 – Solarflare

+0

@scaisEdge我已更新查询。请立即检查。对不起,我现在对日期格式感到困惑。 – MAX

回答

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'); 
+0

解释更好你的评论..请 – scaisEdge

+0

您的更新版本工作..因为字符串是规则之间的连贯性。但问题..我建议在我的答案使用日期更好的比较..所以相反,转换字符串中的日期是正确的在日期中转换字符串..(或使用默认的日期格式) – scaisEdge