【发布时间】:2018-03-07 23:46:24
【问题描述】:
我对如何按日期格式过滤记录有点困惑。
我在日期表中有日期(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(date, '%d-%c-%Y') , DATE_FORMAT(date, '%d-%l-%Y') & DATE_FORMAT(date, '%e-%l-%Y')
没有高兴的脸,请告诉我。
谢谢
最大
【问题讨论】:
-
我看不出这两个查询之间的区别.. .. 请解释清楚
-
Date_format会给你一个字符串。如果您将值作为字符串进行比较,则没有>=2和<=0的字符(这是between '2' and '0'将要查找的字符)。为什么要这样使用它?您可以将输入转换为有效日期并比较有效日期。它还将允许您使用索引。而且,它实际上会根据您的需要进行过滤。 -
@scaisEdge 我已经更新了查询。请现在检查。抱歉,我现在对日期格式感到困惑。