Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 按日期从数据库中选择,但不包括日期、月份和年份_Mysql_Sql_Database_Date - Fatal编程技术网

Mysql 按日期从数据库中选择,但不包括日期、月份和年份

Mysql 按日期从数据库中选择,但不包括日期、月份和年份,mysql,sql,database,date,Mysql,Sql,Database,Date,我发现了类似于: SELECT * FROM POSTY WHERE MONTH(data_dodania) = 5 AND YEAR(data_dodania) = 2017 但这不是我想要的。也许它根本就不存在。 这就是为什么我有一个问题,是否可以做一些像更智能地检查数据这样的事情 如,其中日期=201705(第一年,第二个月) 这个不行,我知道我试过了。但我打这个是为了显示我想要的东西 Idk,where date='May2017或其他什么?您可以使用MySQL以任意方式格式化日期。例

我发现了类似于:

SELECT * FROM POSTY WHERE MONTH(data_dodania) = 5 AND YEAR(data_dodania) = 2017
但这不是我想要的。也许它根本就不存在。 这就是为什么我有一个问题,是否可以做一些像更智能地检查数据这样的事情

,其中日期=201705
(第一年,第二个月)

这个不行,我知道我试过了。但我打这个是为了显示我想要的东西

Idk,
where date='May2017
或其他什么?

您可以使用MySQL以任意方式格式化日期。例如,以下查询格式日期为
YYYYMM
格式:

SELECT DATE_FORMAT(data_dodania, '%Y%m')
FROM POSTY;
现在,如果您有此格式的日期,您可以使用
WHERE
条件中的
date\u格式
来过滤行,例如:

SELECT *
FROM POSTY
WHERE DATE_FORMAT(data_dodania, '%Y%m') = '201705';

同样,2017年5月打印的格式为
%M%Y
(documtation有一个格式和示例列表)。

查询日期的最佳方法是指定要查找的范围。这将能够利用
数据_dodania
字段上的索引。使用任何函数都会导致查询使用行扫描来执行函数,然后比较值。我强烈建议使用以下范围:

SELECT * FROM POSTY WHERE data_dodania >= '2017-05-01' AND data_dodania <= '2017-05-31'

@DarshanMehta我对使用这个非常厌倦,因为在使用诸如
DATE\u FORMAT
之类的函数时,无法使用索引。为了选择一个范围,需要对每一行进行扫描、执行和比较。没有索引可以使用。我知道,我猜@KrystianPolska想要格式化日期(或者已经有了该格式的日期),在这种情况下,我们需要使用
date\u format
函数进行比较。但是请注意,这样的WHERE子句不能使用索引,所以通常最好使用范围条件-根据这里的另一个答案
SELECT * FROM POSTY WHERE data_dodania BETWEEN '2017-05-01' AND '2017-06-01'