mysql数据库怎样查询任意一个月的数据

时间:2021-08-10 09:43:03
开发环境:php+mysql
table表中有一个字段starttime,时间格式形如:2009-09-18 10:15:16
现在想统计任意一年中的一个月数据,并按一个月中的天数统计记录数,$date 是php中定义的变量,格式形如:2009-09-18
我现在按照一个月的天数进行统计,可是mysql不支持YEAR中带变量的参数,如果写成YEAR('2009-09-18')就能正确执行,但是$date是从表单中获取的数据,它是实时更新的,请问这个问题该怎么实现?
SELECT DATE_FORMAT( starttime, '%d' ) AS day , count(*) AS num
FROM table
where YEAR($date)=YEAR(starttime) 
AND MONTH($date)=MONTH(starttime)
GROUP BY day 

14 个解决方案

#1


检查一下你的参数格式,mysql应该是支持YEAR()函数中用变量的。

#2


引用
SELECT DATE_FORMAT( starttime, '%d' ) AS day , count(*) AS num
FROM table
where YEAR($date)=YEAR(starttime) 
AND MONTH($date)=MONTH(starttime)
GROUP BY day 


你的这个语句应该就可以啊? 这条语句有什么问题吗?

#3


YEAR($date)
==>>  YEAR(2009-09-18)
需要加上引号 生成 YEAR('2009-09-18') 

#4


mysql> set @a='2009/08/07';
Query OK, 0 rows affected (0.00 sec)

mysql> select year(@a);
+----------+
| year(@a) |
+----------+
|     2009 |
+----------+
1 row in set (0.00 sec)

定义变量 或者在mysql中写个参数函数
不是很明白你的需求

#5


谢谢各位的回答!这是php网页设计的一部分,我的数据表中starttime记录了好几年的记录,我现在想随意查询某一年中某个月的记录数,比如查询2008年12月份的记录,$date获取值就为'2008-12-**',**可以为1到31之间,然后再按12份中每天的记录数进行统计,最终通过图表显示,奇怪的是,我调试的时候,发现执行sql语句后,一条记录也获取不到,YEAR($date)改为YEAR('2008-12-05') 就可以,但这不是我想要的,因为要查询的日期随时都是变化的啊

#6


 #3楼
YEAR($date)
==>>  YEAR(2009-09-18)
需要加上引号 生成 YEAR('2009-09-18') 


因为你如果只是  YEAR($date) 最终你的SQL语句是 YEAR(2009-09-18) 这并不是正确的msyql日期格式,需要加上引号。形成  YEAR('2009-09-18')  , PHP 中怎么把引号加上,建议你看一下PHP的手册。

#7


year(\'$date\')

#8


引用 7 楼 acmain_chm 的回复:
year(\'$date\')

改成year(\'$date\')直接提示语法错误,不行啊

#9


PHP 的建议你到PHP版去问一下。问题主要在你没有往MYSQL送这对单引号

#10


我这样写代码没有错误哦!可以查询出符合条件的数据来。

mysql> select * from d;
+---------------------+
| d                   |
+---------------------+
| 2009-07-05 15:20:10 |
| 2009-07-14 10:30:00 |
| 2009-04-20 05:15:40 |
+---------------------+
3 rows in set (0.00 sec)


<?php
$conn = mysql_connect("localhost","root","");
mysql_select_db("csdn",$conn);
$year = "2009-05-12";
$sql = "select * from d where year(d)=year('$year')";
echo $sql;
mysql_query("set names gbk",$conn);
$result = mysql_query($sql,$conn);
while($row = mysql_fetch_array($result)){
echo $row[0];
}
?>

#11


多谢各位的帮忙,我已经解决了,主要问题还是出在mysql怎样获取php变量的问题,因为这是在php程序中查询,改成一下就可以了:
mysql_query("
SELECT DATE_FORMAT( starttime, '%d' ) AS day , count(*) AS num
FROM table
where YEAR('".$date."')=YEAR(starttime)
AND MONTH('".$date."')=MONTH(starttime)
GROUP BY day 
")
看起来这个YEAR括号里还真是花哨啊!哈哈!有单引号、双引号、还要带点

#12


引用 10 楼 zhoupuyue 的回复:
我这样写代码没有错误哦!可以查询出符合条件的数据来。
SQL code
mysql>select*from d;+---------------------+| d|+---------------------+|2009-07-0515:20:10||2009-07-1410:30:00||2009-04-2005:15:40|+---------------------+3 rowsinset (0.00 sec)
PHP code<?php$conn=mysql_connect("localhost","root","");mysql_select_db("csdn",$conn);$year="2009-05-12";$sql="select * from d where year(d)=year('$year')";echo$sql;mysql_query("set names gbk",$conn);$result=mysql_query($sql,$conn);while($row=mysql_fetch_array($result)){echo$row[0];
    }?>

多谢Kevin Garnett,我的格式基本和你一样,可是我的却要这么复杂,不知道问什么,我的year('$year')会出错,要用year('".$year."')才行,是不是双引号里面套用双引号会出错啊

#13


双引号套双引号肯定会出错的,你可以外面一层双引号,里面一层单引号。

#14


恩,又长见识了
这里好人真是多啊!真是不知道怎么感谢!

#1


检查一下你的参数格式,mysql应该是支持YEAR()函数中用变量的。

#2


引用
SELECT DATE_FORMAT( starttime, '%d' ) AS day , count(*) AS num
FROM table
where YEAR($date)=YEAR(starttime) 
AND MONTH($date)=MONTH(starttime)
GROUP BY day 


你的这个语句应该就可以啊? 这条语句有什么问题吗?

#3


YEAR($date)
==>>  YEAR(2009-09-18)
需要加上引号 生成 YEAR('2009-09-18') 

#4


mysql> set @a='2009/08/07';
Query OK, 0 rows affected (0.00 sec)

mysql> select year(@a);
+----------+
| year(@a) |
+----------+
|     2009 |
+----------+
1 row in set (0.00 sec)

定义变量 或者在mysql中写个参数函数
不是很明白你的需求

#5


谢谢各位的回答!这是php网页设计的一部分,我的数据表中starttime记录了好几年的记录,我现在想随意查询某一年中某个月的记录数,比如查询2008年12月份的记录,$date获取值就为'2008-12-**',**可以为1到31之间,然后再按12份中每天的记录数进行统计,最终通过图表显示,奇怪的是,我调试的时候,发现执行sql语句后,一条记录也获取不到,YEAR($date)改为YEAR('2008-12-05') 就可以,但这不是我想要的,因为要查询的日期随时都是变化的啊

#6


 #3楼
YEAR($date)
==>>  YEAR(2009-09-18)
需要加上引号 生成 YEAR('2009-09-18') 


因为你如果只是  YEAR($date) 最终你的SQL语句是 YEAR(2009-09-18) 这并不是正确的msyql日期格式,需要加上引号。形成  YEAR('2009-09-18')  , PHP 中怎么把引号加上,建议你看一下PHP的手册。

#7


year(\'$date\')

#8


引用 7 楼 acmain_chm 的回复:
year(\'$date\')

改成year(\'$date\')直接提示语法错误,不行啊

#9


PHP 的建议你到PHP版去问一下。问题主要在你没有往MYSQL送这对单引号

#10


我这样写代码没有错误哦!可以查询出符合条件的数据来。

mysql> select * from d;
+---------------------+
| d                   |
+---------------------+
| 2009-07-05 15:20:10 |
| 2009-07-14 10:30:00 |
| 2009-04-20 05:15:40 |
+---------------------+
3 rows in set (0.00 sec)


<?php
$conn = mysql_connect("localhost","root","");
mysql_select_db("csdn",$conn);
$year = "2009-05-12";
$sql = "select * from d where year(d)=year('$year')";
echo $sql;
mysql_query("set names gbk",$conn);
$result = mysql_query($sql,$conn);
while($row = mysql_fetch_array($result)){
echo $row[0];
}
?>

#11


多谢各位的帮忙,我已经解决了,主要问题还是出在mysql怎样获取php变量的问题,因为这是在php程序中查询,改成一下就可以了:
mysql_query("
SELECT DATE_FORMAT( starttime, '%d' ) AS day , count(*) AS num
FROM table
where YEAR('".$date."')=YEAR(starttime)
AND MONTH('".$date."')=MONTH(starttime)
GROUP BY day 
")
看起来这个YEAR括号里还真是花哨啊!哈哈!有单引号、双引号、还要带点

#12


引用 10 楼 zhoupuyue 的回复:
我这样写代码没有错误哦!可以查询出符合条件的数据来。
SQL code
mysql>select*from d;+---------------------+| d|+---------------------+|2009-07-0515:20:10||2009-07-1410:30:00||2009-04-2005:15:40|+---------------------+3 rowsinset (0.00 sec)
PHP code<?php$conn=mysql_connect("localhost","root","");mysql_select_db("csdn",$conn);$year="2009-05-12";$sql="select * from d where year(d)=year('$year')";echo$sql;mysql_query("set names gbk",$conn);$result=mysql_query($sql,$conn);while($row=mysql_fetch_array($result)){echo$row[0];
    }?>

多谢Kevin Garnett,我的格式基本和你一样,可是我的却要这么复杂,不知道问什么,我的year('$year')会出错,要用year('".$year."')才行,是不是双引号里面套用双引号会出错啊

#13


双引号套双引号肯定会出错的,你可以外面一层双引号,里面一层单引号。

#14


恩,又长见识了
这里好人真是多啊!真是不知道怎么感谢!